Maven“阴影” JAR在文件名中带有“原始”前缀
问题内容:
我正在使用“ shade” Maven2插件来构建将所有Java依赖项捆绑在一起的整体式JAR。中的相关部分pom.xml
非常简单:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>1.4</version>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
<configuration>
<finalName>${project.artifactId}-${project.version}-SHADED</finalName>
<transformers>
<transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
<mainClass>com.mypackage.MyClass</mainClass>
</transformer>
</transformers>
</configuration>
</execution>
</executions>
</plugin>
但是,构建结果很奇怪。似乎两个文件实际上是由该Maven插件创建的:
myartifact-1.0.0-SHADED.jar (zero bytes)
original-myartifact-1.0.0-SHADED.jar (10 MB)
带有前缀“原始”的JAR文件已正确构建,并且功能正常。我想我可以将其重命名以删除该前缀,然后继续愉快地进行下去。
但是,我对“
shade”插件在这里可能发生的情况非常好奇。看起来“原始”文件是临时工作空间类型的东西,打算在过程结束时重命名,并且最终重命名根本没有完成。尽管没有明显的解释(例如文件系统权限等)。有人看过吗?
问题答案:
Maven的构建步骤将创建jar target/artifact-version.jar
。
然后,阴影插件运行。它通常将该jar重命名为target/original-artifact- version.jar
,并为阴影JAR命名target/artifact-version.jar
。
但是,您正在配置Shade插件以使用其他名称。除非有充分的理由,否则我<finalName>
将从您的配置中删除,并使用Shade插件想要给您的东西。