我不知道如何获取Maven-shade-plugin来将POM文件中的应用程序版本包含到Manifest文件中。我发现了一些有关maven-jar-plugin的示例,其中包括
<archive>
<manifest>
<addDefaultImplementationEntries>true</addDefaultImplementationEntries>
<addDefaultSpecificationEntries>true</addDefaultSpecificationEntries>
</manifest>
</archive>
Run Code Online (Sandbox Code Playgroud)
在“插件配置”部分(http://blog.soebes.de/blog/2014/01/02/version-information-into-your-appas-with-maven/)中。我为maven-shade-plugin尝试了此操作,但是它不起作用。我还尝试查找一些信息,如果org.apache.maven.plugins.shade.resource.ManifestResourceTransformer可以做到这一点,但我在文档中找不到任何内容。
有谁知道如何做到这一点?
谢谢!
正如官方说明页面中关于将条目添加到清单文件中所述,也可以支持实现和规范的版本和标题,因为它们是清单文件的条目。
但是Maven Shade Plugin 不支持Apache Maven Archiver,所以<archive>element 在这里不起作用。您必须使用ManifestResourceTransformerMaven Shade Plugin 提供的:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>2.4.3</version>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
<configuration>
<transformers>
<transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
<manifestEntries>
<Main-Class>${project.build.mainClass}</Main-Class>
<Specification-Title>${project.artifactId}</Specification-Title>
<Specification-Version>${project.version}</Specification-Version>
<Implementation-Title>${project.artifactId}</Implementation-Title>
<Implementation-Version>${project.version}</Implementation-Version>
<Implementation-Vendor-Id>${project.groupId}</Implementation-Vendor-Id>
</manifestEntries>
</transformer>
</transformers>
</configuration>
</execution>
</executions>
</plugin>
Run Code Online (Sandbox Code Playgroud)
这个配置也用在我的spring项目中,我可以通过Application.class.getPackage().getImplementationVersion()java直接获取版本号。
然而,简单地替换到 maven shade 会带来副作用,因为它不包括<archive>插件默认的附加资源文件,这会使具有属性资源的项目无法正常工作,例如 spring 项目。因此,在大多数情况下,需要手动维护依赖项以及 maven shade,如下面的频繁使用示例:
<transformers>
<transformer implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
<resource>META-INF/spring.handlers</resource>
</transformer>
<transformer implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
<resource>META-INF/spring.schemas</resource>
</transformer>
<transformer implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
<resource>META-INF/spring.tooling</resource>
</transformer>
<transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
<manifestEntries>
<Main-Class>${project.build.mainClass}</Main-Class>
<Specification-Title>${project.artifactId}</Specification-Title>
<Specification-Version>${project.version}</Specification-Version>
<Implementation-Title>${project.artifactId}</Implementation-Title>
<Implementation-Version>${project.version}</Implementation-Version>
<Implementation-Vendor-Id>${project.groupId}</Implementation-Vendor-Id>
</manifestEntries>
</transformer>
</transformers>
Run Code Online (Sandbox Code Playgroud)