我有两个项目,foo
和 foo-web
下com.example
团体。 foo-web
取决于 foo
.
为了能够在不依赖外部服务的情况下开发应用程序的 UI 部分,foo
中实现了虚拟 DAO。 (它们返回静态数据,因此我们不必连接到数据库等)。
我们被要求将虚拟类移动到 src/test/java
.这意味着它们不会使用 foo.jar
进行部署。从 web 项目构建的 war 。我找到了 these instructions 在 maven 网站上,但它们似乎不适合我。
在 foo
的pom.xml
我有:
<plugin>
<artifactId>maven-jar-plugin</artifactId>
<executions>
<execution>
<id>test-jar</id>
<phase>test-compile</phase>
<goals>
<goal>test-jar</goal>
</goals>
</execution>
</executions>
</plugin>
运行时mvn install
在 foo-web
,在 foo
的目标中我会得到两个 jar :foo-1.0.0-SNAPSHOT.jar
和 foo-1.0.0-SNAPSHOT-tests.jar
.它们都可以在本地 maven 存储库中正常安装。
之前,foo-web
依赖看起来像这样:
<dependency>
<groupId>com.example</groupId>
<artifactId>foo</artifactId>
<version>1.0.0-SNAPSHOT</version>
</dependency>
这将触发 foo-1.0.0-SNAPSHOT.jar
的部署在 war 中。现在,我还想部署 -tests
jar,最好只用于“本地”配置文件。
我尝试了多种方式来做到这一点:
<profile>
<id>local</id>
<dependencies>
<dependency>
<groupId>com.example</groupId>
<artifactId>foo</artifactId>
<version>1.0.0-SNAPSHOT</version>
<type>test-jar</type>
</dependency>
</dependencies>
</profile>
这会导致使用不同的名称部署源 jar:com.example-foo.jar
并且不部署测试jar。我也尝试使用 <classifier>
而不是 <type>
在依赖项中,但它仍然做同样的事情。我尝试在配置文件之外使用上述依赖项(与其他依赖项一起),但它的行为仍然相同。
如果我添加 <type>
到主要依赖项(不添加其他依赖项)我部署了测试 jar(与上面的名称相同),但自然不会部署源。
与文档中所写内容的唯一区别是没有为测试依赖项指定范围。它只适用于 test
范围?我能否以不同的方式部署测试类。
我知道这个问题有点复杂,如果有什么我可以澄清的,请告诉我。
谢谢!
更新:
我尝试了其他几种方法,但仍然无法正常工作。
我在 foo
中的 maven-jar-plugin 中添加了另一个执行。项目(依赖项,而不是主要的 Web 项目),我希望强制 maven 在与主要项目相同的 jar 中编译测试类,并通过不同的分类器引用大包。我无法让它工作:
<execution>
<id>local-build</id>
<phase>package</phase>
<goals>
<goal>jar</goal>
</goals>
<configuration>
<classifier>batman</classifier>
<directory>${basedir}/src/test/java</directory> <!-- tried several variations here -->
<includes>
<include>**</include>
</includes>
</configuration>
</execution>
jar 是用 batman
生成的分类器,但我找不到任何方法让它在 jar
中包含测试类目标。
这样做,我意识到这并不依赖于 test-jar
类型/tests
分类器/test
范围关系。当我试图指定除了主 jar 之外我正在构建的新 jar 时,我得到了与尝试包含 -tests
时相同的行为。 jar 。我检查了本地 maven 存储库,依赖项目中的所有 jar 都安装得很好,所以问题是主项目的依赖解析。
tl;博士
如果您可以使用多个分类器包含相同的依赖项,那么一切都归结为一个问题。从我到现在看到的情况来看,答案是否定的——我总是得到 com.example-foo
使用不同的分类器多次指定相同的依赖项时的jar。
最佳答案
最好在你的第一个模块中配置 maven pom 文件
<project>
<groupId>com.example</groupId>
<artifactId>foo</artifactId>
<version>1.0.0-SNAPSHOT</version>
<packaging>jar</packaging>
<build>
<plugins>
...
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<executions>
<execution>
<goals>
<goal>test-jar</goal>
</goals>
</execution>
</executions>
</plugin>
在此之后,mvn install/release 还将部署一个 Artifact foo-1.0.0-SNAPSHOT-tests.jar
然后使用分类器配置对测试 jar 的依赖(如其他响应中建议的那样)
<dependency>
<groupId>com.example</groupId>
<artifactId>foo</artifactId>
<version>1.0.0-SNAPSHOT</version>
<type>test-jar</type>
<!-- uncomment if needed in test scope only
<scope>test</scope>
-->
</dependency>
关于java - 如何将依赖项的测试 jar 包含到 Maven 项目的部署中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7751860/