maven-jar-plugin:如何为测试创建不同的工件名称?

Posted

技术标签:

【中文标题】maven-jar-plugin:如何为测试创建不同的工件名称?【英文标题】:maven-jar-plugin: How to create a different artifact name for tests? 【发布时间】:2020-06-26 18:15:06 【问题描述】:

假设我将以下插件放在我的 pom.xml 文件中:

      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-jar-plugin</artifactId>
        <version>2.4</version>
        <executions>
          <execution>
            <id>make-a-jar</id>
            <phase>compile</phase>
            <goals>
              <goal>jar</goal>
            </goals>
            <configuration>
               <finalName>my-artifact-name</finalName>
            </configuration>
          </execution>
        </executions>
      </plugin>

然后我运行“mvn clean install”。 Maven 在目标库中创建两个 jar 文件。 第一个 jar 文件编译源文件,第二个 jar 编译测试文件。这两个 jar 都将具有 same 工件名称。

如果我想在另一个项目中使用源代码的jar作为依赖,我可以将以下依赖放在另一个项目中:

   <dependency>
      <groupId>groupId</groupId>
      <artifactId>my-artifact-name</artifactId>
      <scope>system</scope>
      <type>jar</type>
      <systemPath>$basedir/lib/my-artifact-name.jar</systemPath>
   </dependency>

到目前为止一切顺利。

如果我还想为测试文件添加依赖项,就会出现问题。在这种情况下,我将有两个具有相同 groupId 和 artifactId 以及不同 systemPath 的依赖项。 Maven 不会读取具有相同 groupId 和 artifactId 的两个依赖项。只会读取其中一个。

我能想到的一个解决方案是让 Maven 为测试提供不同的工件名称。 你知道怎么做吗?

【问题讨论】:

首先,&lt;systemPath&gt; 不是推荐的方法。如果您mvn clean install 一个项目,则不需要系统路径即可将其用作依赖项(在同一计算机/帐户上)。其次,你的“第二个罐子”的目的是什么?里面应该有什么?它是干什么用的? 一个jar是源文件,第二个jar是测试文件 通常,您不会将测试文件放入 jar 中。那你为什么要那个?你想用那个罐子做什么? 【参考方案1】:

我对此的一般回答是:

src/test/java 中的测试仅用于在构建期间运行它们。它们不需要放入任何罐子中。

如果您需要类作为测试的辅助类,您可以创建一个包含这些类的单独 jar。然后可以将其用作test 依赖项。

无论如何,尽量避免&lt;systemPath&gt;。如果您在计算机上使用 mvn clean install 构建项目,则可以使用

之类的依赖项引用生成的 jar
   <dependency>
      <groupId>groupId</groupId>
      <artifactId>my-artifact-name</artifactId>
      <version>1.2.3</version>
   </dependency>

在同一帐户/计算机上的任何位置,无需提供&lt;systemPath&gt;

【讨论】:

对,但不是系统路径,本地 m2 存储库就足够了。如果需要,应该为多用户访问安装它。 对于多个用户,您不应使用共享的本地存储库,而应使用诸如 Artifactory 或 Nexus 之类的存储库管理器。

以上是关于maven-jar-plugin:如何为测试创建不同的工件名称?的主要内容,如果未能解决你的问题,请参考以下文章

如何为仅在测试中可见的结构创建 init 方法?

如何为自定义 XCTest 断言编写自动化测试?

如何为 DeadLetter Kafka 创建测试

如何为 C++ 程序创建测试运行/计划? [关闭]

K6 负载测试 - 如何为整个测试运行创建顺序 ID

如何为自动化验收测试创建测试数据? [关闭]