簡體   English   中英

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM