java - 为什么 "test-jar"需要 "mvn compile"依赖项

标签 java maven-2 maven-3

我在多模块项目中使用 test-jar 依赖项时遇到问题。例如,当我像这样声明 cleartk-syntax 模块依赖于 cleartk-token 模块的 test-jar 时(完整代码是here ):

<modelVersion>4.0.0</modelVersion>
<groupId>org.cleartk</groupId>
<artifactId>cleartk-syntax</artifactId>
<version>0.5.0-SNAPSHOT</version>
<name>cleartk-syntax</name>
...
<dependencies>
    ...
    <dependency>
        <groupId>org.cleartk</groupId>
        <artifactId>cleartk-token</artifactId>
        <version>0.7.0-SNAPSHOT</version>
        <type>test-jar</type>
        <scope>test</scope>
    </dependency>

如果我使用 maven 2 运行 mvn compile,我会收到以下错误:

[INFO] ------------------------------------------------------------------------
[ERROR] BUILD ERROR
[INFO] ------------------------------------------------------------------------
[INFO] Failed to resolve artifact.

Missing:
----------
1) org.cleartk:cleartk-token:test-jar:tests:0.7.0-SNAPSHOT

如果我使用 maven 3,我会得到错误:

[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 4.654s
[INFO] Finished at: Mon Jan 24 21:19:17 CET 2011
[INFO] Final Memory: 16M/81M
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal on project cleartk-syntax: Could not resolve
dependencies for project org.cleartk:cleartk-syntax:jar:0.5.0-SNAPSHOT: Could
not find artifact org.cleartk:cleartk-token:jar:tests:0.7.0-SNAPSHOT

在后一种情况下,我特别困惑,因为我认为它应该寻找类型为 test-jar 而不是类型为 jar 的工件。

使用 maven 2 或 maven 3,我可以通过运行 mvn compile package -DskipTests 来编译它。使用 Maven 3,我还可以通过运行 mvn compile test-compile 来编译它。

但为什么 maven 2 或 maven 3 在 compile 阶段寻找 test-jar 依赖项?难道不应该等到 test-compile 阶段才去寻找这样的依赖吗?

更新:答案是在我的编译阶段使用的 maven-exec-plugin,requires dependency resolution of artifacts in scope:test .我创建了 a feature request to remove the scope:test dependency .

最佳答案

在我的例子中,根本原因是应该在 test 范围内使用 test-jar 类型的依赖项的模块不包含所需的 maven-jar-plugin 配置。如果没有下面的代码片段,当您在相应模块上调用 mvn deploy 时,将不会部署测试 jar。

<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>
</plugins>

参见 https://maven.apache.org/guides/mini/guide-attached-tests.html了解更多详情。

关于java - 为什么 "test-jar"需要 "mvn compile"依赖项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4786881/

相关文章:

java - androrm 库出现 NoClassDefFoundError

maven-2 - 无法使用 CXF 使用 wsdl2java 和 maven 生成客户端代码

maven - 如何从源根目录下排除源?

performance - Maven 在 OSX 上构建速度慢 3 倍

maven - 获取缺少依赖项的 Maven 项目的依赖项树

filtering - Maven 过滤

java - 有没有办法创建键为大写的 JSON 对象?

java - 如何让物体在另一个物体接触后消失?

maven - 如何判断哪个签名的 jar 导致 maven-shade-plugin 失败?

java - 调用函数而不执行新操作