我不知道如何让maven-shade-plugin将POM文件中的应用程序版本包含到Manifest文件中。我找到了一些maven-jar-plugin的示例,它们建议包括
<archive>
<manifest>
<addDefaultImplementationEntries>true</addDefaultImplementationEntries>
<addDefaultSpecificationEntries>true</addDefaultSpecificationEntries>
</manifest>
</archive>在插件配置部分(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可以做到这一点,但我在文档中找不到任何东西。
有谁知道怎么做吗?
谢谢!
发布于 2017-10-30 01:35:39
正如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.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>在我的spring项目中也使用了这种配置,在那里我可以通过java中的Application.class.getPackage().getImplementationVersion()直接检索版本号。
然而,简单地替换maven shade会带来副作用,因为不会像<archive>插件在默认情况下那样包含额外的资源文件,这会使具有属性资源的项目无法工作,比如spring项目。因此,在大多数情况下,需要将maintaining dependencies by hand与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>https://stackoverflow.com/questions/45812230
复制相似问题