Java Maven JAR插件3.0.2错误:您必须使用分类器将补充工件附加到项目中,而不是替换它们
Maven JAR插件(3.0.2版)不断抛出以下错误,即使只调用了Java Maven JAR插件3.0.2错误:您必须使用分类器将补充工件附加到项目中,而不是替换它们,java,maven,jar,maven-jar-plugin,Java,Maven,Jar,Maven Jar Plugin,Maven JAR插件(3.0.2版)不断抛出以下错误,即使只调用了JARgoal: [错误]无法在项目测试中执行目标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&
JAR
goal:
[错误]无法在项目测试中执行目标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>
4.0.0
测试
,classifier
只需要在同一目标的多个调用上指定,并且对于testjar
目标有一个合理的默认值,我不打算更改它
另外,这个问题似乎没有出现在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>
这意味着插件实际上执行了两次。发生的事情是,Jar插件,在一个包为Jar
的项目中。此默认执行是日志中提到的,ID为defaultjar
当您在插件中配置一个
时,您实际上配置了一个新的执行,在那里调用插件的jar
目标。由于,在jar
打包固有的默认绑定之后,该执行将在该阶段执行。由于插件已经运行,它失败了,因为再次运行它实际上会替换第一次运行时已经生成的主要工件。此错误是在中插件的3.0.0版本中添加的,因为发生这种情况很可能是错误配置,应该尽早检测到
因此,修复很简单:不需要指定目标的执行,而让默认的执行(来自jar
打包)完成工作。由于默认执行,即使没有显式配置JAR
目标,JAR仍然会被创建。如果您还想要一个测试JAR,请使用:
maven jar插件
3.0.2
试验罐
但是请注意,没有指定目标jar
。在我的例子中,我已经将执行的ID设置为默认jar,然后错误就消失了。e、 g
<execution>
<id>default-jar</id>
<phase>package</phase>
<goals>
<goal>jar</goal>
</goals>
</execution>
默认jar
包裹
罐子
如果您的日志显示以下内容:
[INFO] --- maven-jar-plugin:3.0.2:jar (default-jar) @ test --
[WARNING] JAR will be empty - no content was marked for inclusion!
在src/main/java中添加一个无用的类似乎可以解决这个问题,请参见:
这“有效”,但基于这样一个事实:将default jar
作为执行ID覆盖了jar
打包中的默认执行。这有点像黑客,有一个更好的解决方案。感谢您的解释-尽管我已经将打包设置为“war”(而不是“jar”),但我还是遇到了这个问题,但是删除jar插件中的包修复了这个问题。我只在使用jenkins和linux的环境中的多模块设置中遇到这个错误。在Mac OS机器上运行的东西也在Travis CI环境中运行。似乎还有更多令人沮丧的骗局。我知道错误消息比帮助更让人困惑,它只指向这篇stackoverflow文章。谢谢链接!还提到了调用mvn clean verify deploy的情况,它会执行所有操作,直到验证两次。在我的例子中,mvn干净的安装部署失败了,但mvn干净的部署成功了。(还有一个空罐子。)
[INFO] --- maven-jar-plugin:3.0.2:jar (default-jar) @ test --
[WARNING] JAR will be empty - no content was marked for inclusion!