【发布时间】:2015-08-01 16:44:50
【问题描述】:
我正在使用 maven-shade-plugin 创建单个可执行 jar。
我希望插件在目标目录中创建一个 jar (foo.jar)。
但是它也会创建另外两个 jar:original-foo.jar 和 foo-shaded.jar。
它为什么会创建这些文件以及如何禁用此行为?
(我们有另一个使用该插件的项目,其中没有创建这些文件。因此我很确定可以禁用这些文件,但我看不出有什么区别。)
【问题讨论】:
我正在使用 maven-shade-plugin 创建单个可执行 jar。
我希望插件在目标目录中创建一个 jar (foo.jar)。
但是它也会创建另外两个 jar:original-foo.jar 和 foo-shaded.jar。
它为什么会创建这些文件以及如何禁用此行为?
(我们有另一个使用该插件的项目,其中没有创建这些文件。因此我很确定可以禁用这些文件,但我看不出有什么区别。)
【问题讨论】:
使用 outputFile 的插件 maven-shade-plugin 正在绕过其他行为:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
...
<configuration>
<outputFile>/tmp/watchdog.jar</outputFile>
</configuration>
</plugin>
更多信息在:https://maven.apache.org/plugins/maven-shade-plugin/shade-mojo.html#outputFile
【讨论】:
target/${project.artifactId}-${project.version}.jar。
您可以查看maven-shade-plugin 文档,该文档将为您提供shadedArtifactAttached 选项,该选项将控制您所描述的行为。
<project>
...
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>2.3</version>
<executions>
<execution>
<goals>
<goal>shade</goal>
</goals>
<configuration>
<shadedArtifactAttached>false</shadedArtifactAttached>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
...
</project>
【讨论】:
foo-shaded.jar 文件,但仍会生成 original-foo.jar 文件。我也很好奇为什么其他项目没有生成foo-shaded.jar尽管缺少上述配置。