【发布时间】: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 为测试提供不同的工件名称。 你知道怎么做吗?
【问题讨论】:
-
首先,
<systemPath>不是推荐的方法。如果您mvn clean install一个项目,则不需要系统路径即可将其用作依赖项(在同一计算机/帐户上)。其次,你的“第二个罐子”的目的是什么?里面应该有什么?它是干什么用的? -
一个jar是源文件,第二个jar是测试文件
-
通常,您不会将测试文件放入 jar 中。那你为什么要那个?你想用那个罐子做什么?