gpt4 book ai didi

java - 使用设置为生成的项目 JAR 的类路径执行 Maven 单元测试

转载 作者:搜寻专家 更新时间:2023-11-01 02:50:29 24 4
gpt4 key购买 nike

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

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

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

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

我试过手动添加和删除依赖类,如下所述: http://maven.apache.org/plugins/maven-surefire-plugin/examples/configuring-classpath.html, 但直到现在它还没有工作。

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

<?xml version="1.0" encoding="UTF-8"?>
<project>
<modelVersion>4.0.0</modelVersion>
<groupId>org.mygroupid</groupId>
<artifactId>myartifact</artifactId>
<version>0.0.1-SNAPSHOT</version>

<dependencies>
...
</dependencies>

<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.1</version>
<configuration>
<source>1.7</source>
<target>1.7</target>
</configuration>
</plugin>

<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-source-plugin</artifactId>
<version>2.1.2</version>
<executions>
<execution>
<id>attach-sources</id>
<goals>
<goal>jar</goal>
</goals>
</execution>
</executions>
</plugin>

<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<version>2.4</version>

<configuration>
<includeScope>runtime</includeScope>
<outputDirectory>${project.build.directory}/lib</outputDirectory>
</configuration>

<executions>
<execution>
<id>copy-dependencies</id>
<phase>process-resources</phase>
<!-- <phase>package</phase> -->
<goals>
<goal>copy-dependencies</goal>
</goals>

</execution>
</executions>
</plugin>

<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.12.3</version>
<configuration>
<classpathDependencyExcludes>
<classpathDependencyExclude>
${project.build.outputDirectory}
</classpathDependencyExclude>
</classpathDependencyExcludes>

<additionalClasspathElements>
<additionalClasspathElement>
${project.build.directory}/${project.build.finalName}.${project.packaging}
</additionalClasspathElement>
</additionalClasspathElements>
</configuration>
</plugin>

</plugins>

</build>
</project>

在此先感谢您的帮助!

最佳答案

作为测试生命周期阶段的一部分执行的标准单元测试看不到项目 JAR,因为 test 阶段在 package 阶段之前执行,因此您的测试运行在 Maven 生成 JAR 之前。参见 this page获取生命周期阶段列表及其顺序。

您希望它以集成测试的形式运行您的测试,集成测试在 integration-test 阶段执行。

有许多教程可用于设置 Maven 以运行集成测试。 Herehere是几个开胃菜。 failsafe plugin通常用于执行集成测试。

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

关于java - 使用设置为生成的项目 JAR 的类路径执行 Maven 单元测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12198047/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com