【发布时间】:2011-12-06 19:14:54
【问题描述】:
我有两个项目,foo 和 foo-web 在 com.example 组下。 foo-web 依赖于 foo。
为了能够在不依赖外部服务的情况下开发应用程序的 UI 部分,在 foo 中实现了虚拟 DAO(它们返回静态数据,因此我们不必连接到数据库等)。
我们需要将虚拟类移至src/test/java。这意味着他们不会使用foo.jar 部署到从 Web 项目构建的战争中。我在 maven 网站上找到了 these instructions,但它们似乎不适合我。
在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>
在foo-web 上运行mvn install 时,在foo 的目标中我会得到两个罐子: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 在战争中的部署。现在,我还想部署-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 项目(依赖项,而不是主 web 项目)中的 maven-jar-plugin 中添加了另一个执行,我希望在其中强制 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 type/testsclassifier/test范围关系。当我尝试指定除了主要的 jar 之外我正在构建的新 jar 时,我得到了与尝试包含 -tests jar 时相同的行为。我检查了本地 maven 存储库,依赖项目中的所有 jar 都安装得很好,所以问题是主项目的依赖解析。
tl;博士
如果您可以使用多个分类器包含相同的依赖项,那么一切都归结为一个问题。从我到现在看到的情况来看,答案是否定的——当使用不同的分类器多次指定相同的依赖项时,我总是得到com.example-foo jar。
【问题讨论】:
-
也许以下答案会对您有所帮助 - 它帮助我解决了类似的问题:stackoverflow.com/a/1733745
标签: java deployment maven dependencies