执行Mavenunit testing,并将classpath设置为生成的项目JAR

我的应用程序中的某些unit testing与查找和操作属于应用程序本身的某些文件资源有关。 我需要在应用程序的实际生产设置中执行这些测试,它将其部署为JAR文件,而不是作为展开的目录。

我怎么能指示Maven执行我的unit testing,考虑作为类路径项目生成jar文件(以及任何其他声明的库依赖项)而不是默认情况下在文件系统中编译的类?

换句话说,现在我的unit testing的类路径设置为: /$PROJECTPATH/target/classes/

相反,我希望将此类路径设置为:/ /$PROJECTPATH/target/myjarfile.jar

我已尝试手动添加和删除依赖项类,如下所述: http : //maven.apache.org/plugins/maven-surefire-plugin/examples/configuring-classpath.html ,但直到现在它还无法运行。

我目前的项目POM看起来像这样:

   4.0.0 org.mygroupid myartifact 0.0.1-SNAPSHOT  ...     org.apache.maven.plugins maven-compiler-plugin 2.1  1.7 1.7    org.apache.maven.plugins maven-source-plugin 2.1.2   attach-sources  jar      org.apache.maven.plugins maven-dependency-plugin 2.4  runtime ${project.build.directory}/lib    copy-dependencies process-resources <!-- package -->  copy-dependencies      org.apache.maven.plugins maven-surefire-plugin 2.12.3    ${project.build.outputDirectory}     ${project.build.directory}/${project.build.finalName}.${project.packaging}        

在此先感谢您的任何帮助!

作为测试生命周期阶段的一部分执行的标准unit testing无法看到项目JAR,因为test阶段在package阶段之前执行,因此测试在Maven生成JAR之前运行。 有关生命周期阶段及其顺序的列表,请参阅此页面 。

您希望它将您的测试作为集成测试运行,这些测试在integration-test阶段执行。

有许多教程可以设置Maven来运行集成测试。 这里和这里有几个先发球员。 故障安全插件通常用于执行集成测试。

我不记得集成测试是否在类路径中使用target/classes或项目的JAR文件。 但如果不是,您可以随时创建另一个Maven项目,在那里添加测试并将主项目添加为此集成测试项目的依赖项。 在某些情况下,这可能比在主项目中使用集成测试阶段更可取,如果它不仅仅是标准的Java库,例如,如果您正在编写注释处理器。