我无法弄清楚如何让maven-shade-plugin将POM文件中的应用程序版本包含到Manifest文件中。 我找到了一些maven-jar-plugin的例子,其中包括
<archive>
<manifest>
<addDefaultImplementationEntries>true</addDefaultImplementationEntries>
<addDefaultSpecificationEntries>true</addDefaultSpecificationEntries>
</manifest>
</archive>
在plugis配置部分(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可以做到这一点,但我在文档中找不到任何东西。
有人知道怎么做吗?
谢谢!
答案 0 :(得分:3)
正如official instruction page中有关在清单文件中添加条目的描述,也可以支持版本和实施标题以及规范,因为它们是清单文件的条目。
但Maven Shade插件不支持Apache Maven Archiver,因此<archive>
元素在此处不起作用。您必须使用Maven Shade插件提供的ManifestResourceTransformer
:
<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.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>
</configuration>
</execution>
</executions>
</plugin>
这个配置也用在我的项目中,我可以通过java中的Application.class.getPackage().getImplementationVersion()
直接检索版本号。