Maven JAR 插件 3.0.2 错误:您必须使用分类器将补充工件附加到项目而不是替换它们

新手上路,请多包涵

Maven JAR 插件(版本 3.0.2)不断抛出以下错误, 即使是单次调用 jar 目标也是如此

[错误]无法在项目测试中执行目标 org.apache.maven.plugins:maven-jar-plugin:3.0.2:jar(默认):您必须使用分类器将补充工件附加到项目而不是替换它们. -> [帮助 1]

这是一个(最小的?) pom.xml 演示了问题:

 <project xmlns="http://maven.apache.org/POM/4.0.0">
  <modelVersion>4.0.0</modelVersion>

  <groupId>test</groupId>
  <artifactId>test</artifactId>
  <version>1.0.0-SNAPSHOT</version>

  <build>
    <plugins>
      <plugin>
        <artifactId>maven-jar-plugin</artifactId>
        <version>3.0.2</version>
        <executions>
          <execution>
            <goals>
              <goal>jar</goal>
            </goals>
          </execution>
        </executions>
      </plugin>
    </plugins>
  </build>
</project>

调用只是 mvn package

  • 是否有任何类/资源似乎并不重要——无论如何都会出现上述错误消息。
  • 如果指定了两个目标( jartest-jar ),也会出现此问题。
  • 如果 未指定目标,则不会出现该问题。但这不是一个选择,因为我真的需要 jartest-jar

根据 文档classifier 只需要在同一目标的多次调用中指定,并且 test-jar 目标有一个合理的默认值,我不打算更改。

此外, 问题似乎没有出现在 JAR 插件的 2.x 行上。

我错过了什么?有人可以建议我做错了什么吗?

PS Maven 版本是 3.3.9。

原文由 Alex Shesterov 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 658
2 个回答

Jar 插件实际上使用配置执行了两次:

 <plugin>
  <artifactId>maven-jar-plugin</artifactId>
  <version>3.0.2</version>
  <executions>
    <execution>
      <goals>
        <goal>jar</goal>
      </goals>
    </execution>
  </executions>
</plugin>

如果你用这样的配置检查日志,你会得到类似的东西:

 [INFO] --- maven-jar-plugin:3.0.2:jar (default-jar) @ test ---
[INFO] Building jar: ...\test\target\test-0.0.1-SNAPSHOT.jar
[INFO]
[INFO] --- maven-jar-plugin:3.0.2:jar (default) @ test ---
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------

这意味着该插件实际上被执行了两次。发生的情况是,Jar 插件在一个包装为 jar 的项目中 有一个默认执行绑定到 package 阶段。此默认执行是日志中提到的 ID 为 default-jar 的执行。

当您在插件中配置 <execution> 时,您实际上配置了一个新的执行,其中 jar 插件的目标将被调用。由于 jar 目标默认绑定到 package 阶段,该执行在该阶段执行,在 jar 固有的默认绑定之后由于插件已经运行,所以它失败了,因为再次运行它实际上会替换第一次运行期间已经生成的主要工件。这个错误是在 MJAR-198 插件的 3.0.0 版本中添加的,因为发生这种情况很可能是配置错误,应该及早发现。

因此,修复很简单:不要执行指定目标 jar ,让默认的执行(来自 jar 包装)完成工作。由于默认执行,即使没有显式配置 jar 目标,JAR 仍将被创建。如果您还想要一个测试 JAR, 您仍然需要配置插件来执行此操作

 <plugin>
  <artifactId>maven-jar-plugin</artifactId>
  <version>3.0.2</version>
  <executions>
    <execution>
      <goals>
        <goal>test-jar</goal>
      </goals>
    </execution>
  </executions>
</plugin>

但请注意,未指定目标 jar

原文由 Tunaki 发布,翻译遵循 CC BY-SA 3.0 许可协议

就我而言,我已将执行 ID 设置为 default-jar ,覆盖默认执行。然后错误消失了。

 <execution>
    <id>default-jar</id>
    <phase>package</phase>
    <goals>
        <goal>jar</goal>
    </goals>
</execution>

原文由 Derik 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题