执行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库,例如,如果您正在编写注释处理器。
- Java类存在于类路径中,但启动失败,错误:无法找到或加载主类
- Java类查找器工具
- 使用Eclipse在Manifest文件中构建ClassPath变量
- 如何覆盖存放在ant lib目录中的ant任务
- java.lang.ClassNotFoundException / NoClassDefFoundError for com / fasterxml / jackson / databind / ObjectMapper with Maven
- 从命令行运行Mahout(CLASSPATH)
- 不属于classpath的dependecies的测试资源?
- 是否可以动态加载包中包含的所有属性文件? 即MyClass.class.getResource(’*。properties’);
- Tomcat 6 vs 7 – lib vs shared / lib – jars only?