![](/img/trans.png)
[英]How to add DefaultImplementationEntries to MANIFEST when using maven-shade-plugin?
[英]maven-shade-plugin add application version to manifest
我不知道如何讓 maven-shade-plugin 將應用程序版本從 POM 文件包含到清單文件中。 我找到了一些 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 可以做到這一點,我也試圖找到一些信息,但我在文檔中找不到任何內容。
有沒有人知道如何做到這一點?
謝謝!
正如官方說明頁面中關於將條目添加到清單文件中所述,也可以支持實現和規范的版本和標題,因為它們是清單文件的條目。
但是 Maven Shade Plugin 不支持Apache Maven Archiver ,所以<archive>
元素在這里不起作用。 您必須使用 Maven Shade Plugin 提供的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 項目。 因此,在大多數情況下,需要手動維護依賴項以及 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>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.