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: ...testtargettest-0.0.1-SNAPSHOT.jar[INFO] [INFO] --- maven-jar-plugin:3.0.2:jar (default) @ test ---[INFO] ------------------------------------------------------------------------[INFO] BUILD FAILURE[INFO] ------------------------------------------------------------------------
表示该插件实际上执行了两次。发生的情况是,在具有打包的项目中的Jar插件
jar具有绑定到
packagephase
的默认执行。此默认执行是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未指定目标。



