Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/maven/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在类路径设置为生成的项目JAR的情况下执行Maven单元测试_Java_Maven_Classpath - Fatal编程技术网

Java 在类路径设置为生成的项目JAR的情况下执行Maven单元测试

Java 在类路径设置为生成的项目JAR的情况下执行Maven单元测试,java,maven,classpath,Java,Maven,Classpath,我的应用程序中的一些单元测试与查找和操作属于应用程序本身的某些文件资源有关。 我需要在应用程序的实际生产环境中执行这些测试,将其部署为JAR文件,而不是分解目录 考虑到项目生成的jar文件(以及任何其他声明的库依赖项)作为类路径,而不是默认情况下文件系统中编译的类,我如何指示Maven执行单元测试 换句话说,现在我的单元测试的类路径设置为:/$PROJECTPATH/target/classes/ 相反,我希望将这个类路径设置为:/$PROJECTPATH/target/myjarfile.ja

我的应用程序中的一些单元测试与查找和操作属于应用程序本身的某些文件资源有关。 我需要在应用程序的实际生产环境中执行这些测试,将其部署为JAR文件,而不是分解目录

考虑到项目生成的jar文件(以及任何其他声明的库依赖项)作为类路径,而不是默认情况下文件系统中编译的类,我如何指示Maven执行单元测试

换句话说,现在我的单元测试的类路径设置为:
/$PROJECTPATH/target/classes/

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

我已尝试手动添加和删除依赖项类,如下所述: ,但直到现在它还不起作用

我当前的项目POM如下所示:


4.0.0
org.mygroupid
我的神器
0.0.1-快照
...
org.apache.maven.plugins
maven编译器插件
2.1
1.7
1.7
org.apache.maven.plugins
maven源插件
2.1.2 
附加来源
罐子
org.apache.maven.plugins
maven依赖插件
2.4
运行时
${project.build.directory}/lib
复制依赖项
过程资源
复制依赖项
org.apache.maven.plugins
maven surefire插件
2.12.3
${project.build.outputDirectory}
${project.build.directory}/${project.build.finalName}.${project.packaging}

提前谢谢你的帮助

作为测试生命周期阶段的一部分执行的标准单元测试无法看到项目JAR,因为
测试
阶段在
阶段之前执行,所以测试在Maven生成JAR之前运行。有关生命周期阶段及其顺序的列表,请参见

您希望它以集成测试的形式运行您的测试,这些测试在集成测试阶段执行

有许多关于设置Maven以运行集成测试的教程。这是一对先发球员。通常用于执行集成测试


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

这个问题可能会有帮助:。要求是不同的(OP特别希望JAR离开类路径),但也许它会提供一些提示。您解决了这个问题吗?+1感谢您的澄清,但是uff,这个简单的问题比我预期的更复杂。有一个问题,您的答案解释了为什么不能将jar添加到类路径,但没有解释为什么${project.build.outputDirectory}没有被排除在类路径之外(使用该类路径测试成功),我的classpathDependencyExclude元素有问题吗?ClasspathDependencyExcludes只排除依赖项,它们的形式为
groupId:artifactId
。如果将插件配置选项
classesDirectory
(默认情况下为${project.build.outputDirectory})设置为其他不存在的目录,以便类路径中不包括您的类目录,则可能会起作用。