gpt4 book ai didi

java - maven-shade-plugin 将应用程序版本添加到 list

转载 作者:搜寻专家 更新时间:2023-11-01 02:58:15 24 4
gpt4 key购买 nike

我不知道如何让 maven-shade-plugin 将 POM 文件中的应用程序版本包含到 list 文件中。我找到了一些 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 可以执行此操作,我也尝试查找一些信息,但我在文档中找不到任何信息。

有没有人知道如何做到这一点?

谢谢!

最佳答案

正如official instruction page中所述关于将条目添加到 list 文件中,实现的版本和标题以及规范也可以得到支持,因为它们是 list 文件的条目。

但是Apache Maven Archiver Maven Shade 插件不支持,所以 <archive>元素在这里不起作用。你必须使用 ManifestResourceTransformer ,由 Maven Shade 插件提供:

<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项目中,我可以通过Application.class.getPackage().getImplementationVersion()直接获取版本号。在 Java 中。

然而,简单地替换为 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>

关于java - maven-shade-plugin 将应用程序版本添加到 list ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45812230/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com