【发布时间】:2014-02-13 13:56:17
【问题描述】:
我们有一个非常奇怪的问题,特别是因为相同的解决方案在项目的其他部分也有效。
我们正在使用 Maven 3
我们在模块 A 中有一个带有单元测试和一些类(即模拟)的模块。 模块 B,对于源和测试源都依赖于 A。
所以我们做了以下事情:
在模块 A 中:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>2.4</version>
<executions>
<execution>
<goals>
<goal>test-jar</goal>
</goals>
</execution>
</executions>
</plugin>
然后我们在模块 B 的 pom 中放入:
<!--Source dependency-->
<dependency>
<groupId>myGroup</groupId>
<artifactId>A</artifactId>
<version>${project.version}</version>
<type>jar</type>
<scope>compile</scope>
</dependency>
<!--Test dependency-->
<dependency>
<groupId>myGroup</groupId>
<artifactId>A</artifactId>
<version>${project.version}</version>
<type>test-jar</type>
<scope>test</scope>
</dependency>
因此,当我们构建项目时,一切正常,据我所知,构建运行“安装”阶段,所以一切正常是有道理的。 现在,我们正在尝试发布,在模块 B 的编译阶段,我们总是得到:
未能在项目 B 上执行目标:无法解决依赖关系 对于项目 myGroup:B:war:1.5.0.0:找不到 “链接到我们的工件”中的 myGroup:A:jar:tests:1.5.0.0 被缓存在 本地存储库,解析将不会重新尝试,直到 “公司名称”的更新间隔已过或强制更新
从我在构建日志中可以看到,它发生在“maven-compiler-plugin”执行期间,那么为什么它会尝试获取仅在测试范围内依赖的测试 jar?
这不是我们第一次在项目中使用这种方法,而且它一直有效(到目前为止,我们已经发布了几个版本)。
【问题讨论】:
-
这看起来您的多模块构建工作不正常。我假设您缺少依赖项,换句话说,构建顺序不是应该的。我建议清理您的本地存储库并通过
mvn clean package尝试构建我认为这会失败。 -
感谢您的回复。我删除了整个存储库,然后运行 mvn clean 和 maven package。没有什么失败
-
你确定你使用的是 Maven 4 吗?它似乎没有公开可用,甚至没有作为测试版。
-
抱歉,打错了,我会改正的
-
您能分享您的完整 POM 和您正在运行的确切 Maven 命令吗?我在多个多模块项目中使用 Maven 3,并且完全按照上述设置,并且从未遇到过问题。
标签: java unit-testing maven