java - 使用maven-shade-plugin时如何将DefaultImplementationEntries添加到MANIFEST?

标签 java maven manifest maven-shade-plugin

发现这个关于向manifest.mf添加版本的问题:How do I add an Implementation-Version value to a jar manifest using Maven? ,但是使用shade插件时如何添加它们呢?

我尝试使用 maven-shade-plugin:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-shade-plugin</artifactId>
    <executions>
        <execution>
            <goals>
                <goal>shade</goal>
            </goals>
            <configuration>
                <finalName>ispf-win</finalName>
                <shadedArtifactAttached>shade</shadedArtifactAttached>
                <outputDirectory>${project.build.directory}/ispf-win</outputDirectory>
                <transformers>
                    <transformer
                        implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
                        <mainClass>desktop.win.main.Main</mainClass>
                        <manifest>
                            <addDefaultImplementationEntries>true</addDefaultImplementationEntries>
                        </manifest>
                    </transformer>
                </transformers>
            </configuration>
        </execution>
    </executions>
</plugin>

但是,这产生了一个错误:

Failed to execute goal org.apache.maven.plugins:maven-shade-plugin:3.2.4:shade (default) on project desktop.win:
Unable to parse configuration of mojo org.apache.maven.plugins:maven-shade-plugin:3.2.4:shade for parameter addDefaultImplementationEntries: 
Cannot find 'addDefaultImplementationEntries' in class java.util.jar.Manifest

最佳答案

设置这些标准 Maven 属性:

<name>Project Name</name>
<organization.name>Company</organization.name>
<groupId>Group ID</groupId>
<version>1.0.0</version>

以及以下 Maven 阴影配置:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-shade-plugin</artifactId>
    <executions>
        <execution>
            <phase>package</phase>
            <goals>
                <goal>shade</goal>
            </goals>
            <configuration>
                <transformers>
                    <!-- Add entries to the manifest. -->
                    <transformer implementation = "org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
                        <manifestEntries>
                            <Implementation-Title>${project.name}</Implementation-Title>
                            <Implementation-Version>${project.version}</Implementation-Version>
                            <Implementation-Vendor-Id>${project.groupId}</Implementation-Vendor-Id>
                            <Implementation-Vendor>${project.organization.name}</Implementation-Vendor>
                        </manifestEntries>
                    </transformer>
                </transformers>
            </configuration>
        </execution>
    </executions>
</plugin>

您将得到想要的结果:

Manifest-Version: 1.0
Created-By: Maven Jar Plugin 3.2.0
Build-Jdk-Spec: 11
Implementation-Title: Project Name
Implementation-Vendor: Company
Implementation-Vendor-Id: Group ID
Implementation-Version: 1.0.0

对于多模块项目中的“设置它并忘记它”配置,设置 <organization.name>在父 pom <properties> 中部分和 <name>在每个模块 pom 中。

关于java - 使用maven-shade-plugin时如何将DefaultImplementationEntries添加到MANIFEST?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68246377/

相关文章:

java - 无法在 .jar 文件中找到或加载主类

android - 如何设置 rtl=false ,只为一层?

java - 如何使用 3rd 方库依赖项部署 javaagent

java - jsp中的中文国际化问题

java - 如何将 session 从一台 Tomcat 服务器转移到另一台?

java - Hibernate - 如何验证是否真的执行了批量插入

java - Spring Data JPA 规范 - 不同 + 连接中按列排序

maven - 带有 Maven Jetty 插件的静态内容

java - 将 settings.xml 中设置的属性访问到 spring.xml

maven - 如何在具有依赖项的 jar 中包含 RTI nddsjava 库?