Ale*_*rov 24 java jar maven maven-jar-plugin
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>
Run Code Online (Sandbox Code Playgroud)
调用只是mvn package.
jar和test-jar),也会出现问题.jar和test-jar.根据文档,classifier只需要在同一目标的多个调用中指定,并且对于test-jar我不打算更改的目标存在合理的默认值.
此外,问题似乎没有出现在JAR插件的2.x行上.
我错过了什么?有谁可以建议我做错了什么?
PS Maven版本是3.3.9.
Tun*_*aki 39
Jar插件实际上是使用配置执行两次:
<plugin>
<artifactId>maven-jar-plugin</artifactId>
<version>3.0.2</version>
<executions>
<execution>
<goals>
<goal>jar</goal>
</goals>
</execution>
</executions>
</plugin>
Run Code Online (Sandbox Code Playgroud)
如果您使用这样的配置检查日志,您将具有以下内容:
[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] ------------------------------------------------------------------------
Run Code Online (Sandbox Code Playgroud)
这意味着插件实际上执行了两次.会发生什么,是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>
Run Code Online (Sandbox Code Playgroud)
但请注意,目标jar未指定.
如果您的日志显示如下内容:
[INFO] --- maven-jar-plugin:3.0.2:jar (default-jar) @ test --
[WARNING] JAR will be empty - no content was marked for inclusion!
Run Code Online (Sandbox Code Playgroud)
在 src/main/java 中添加一个无用的类似乎解决了这个问题,见:
由于上述链接可能在 2021-09 年被破坏,您可能想尝试http://mail-archives.apache.org/mod_mbox/maven-users/201608.mbox/thread作为替代
小智 7
就我而言,我已将执行的 ID 设置为 default-jar,然后错误消失了。例如
<execution>
<id>default-jar</id>
<phase>package</phase>
<goals>
<goal>jar</goal>
</goals>
</execution>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
19793 次 |
| 最近记录: |