java - Maven JAR 插件 3.0.2 错误 : You have to use a classifier to attach supplemental artifacts to the project instead of replacing them

标签 java maven jar maven-jar-plugin

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

[ERROR] Failed to execute goal org.apache.maven.plugins:maven-jar-plugin:3.0.2:jar (default) on project test: You have to use a classifier to attach supplemental artifacts to the project instead of replacing them. -> [Help 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

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

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

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

附: Maven 版本是 3.3.9。

最佳答案

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 has a default execution bound to the package phase .此默认执行是日志中提到的 ID 为 default-jar 的执行。 .

当您配置 <execution>在插件中,您实际上配置了一个新的执行,其中 jar插件的目标是被调用。由于 jar goal binds by default to the package phase ,在 jar 固有的默认绑定(bind)之后,该执行将在该阶段执行。打包。而且由于插件已经运行,它失败了,因为再次运行它实际上会替换第一次运行期间已经产生的主要 Artifact 。此错误是在插件的版本 3.0.0 中添加的 MJAR-198 ,因为发生这样的事情很可能是配置错误,应该尽早发现。

因此,修复很简单:没有指定目标的执行 jar ,并让默认的(来自 jar 包装)完成工作。即使没有 jar 的显式配置,仍将创建 JAR。目标,这要归功于默认执行。如果你也想要一个测试 JAR,you will still need to configure the plugin to do that与:

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

但请注意,目标 jar未指定。

关于java - Maven JAR 插件 3.0.2 错误 : You have to use a classifier to attach supplemental artifacts to the project instead of replacing them,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40964500/

相关文章:

java - android,屏幕底部的ImageView

maven - 如何在pivotal Cloud Foundry中部署多模块maven spring boot项目?

java - Eclipse 导入 Maven 配置文件中声明的依赖项

java - Runnable/Thread 可能的误解

java - 从网站上读取行

java - 将 Scala 项目包含在 Java Maven 依赖项中

java - 从 JAR 文件外部加载资源文件

java - 有没有办法调试为什么我的 JavaFX-Project 的可执行 JAR 在我的计算机上运行而不是在其他计算机上运行? (使用jdk 1.8._051)

java - LuaJ (Java) 编译成jar

java - 通用堆栈不接受整数值