gpt4 book ai didi

maven - 使用 Maven Shade 插件时如何指定自定义 MANIFEST.MF 文件?

转载 作者:行者123 更新时间:2023-12-02 01:26:31 24 4
gpt4 key购买 nike

当项目使用 Maven-jar-plugin 时,很容易在 jar 中包含自定义 list 文件,但我找不到使用 Maven 阴影执行相同操作的方法。使用“Maven-shade-plugin”时如何使用自己的 list 文件?

其他详细信息:

我的自定义 list 文件位于“src/main/resources/META-INF/MANIFEST.MF”中。Maven 不包含我的文件,而是在最终的 jar 中将其替换为默认的 Maven list 文件。

我需要自定义 list 文件的原因是在我的 list 中为 swing 组件库指定一些 JavaBeans 类。应在 list 文件中按以下格式指定多个 JavaBeans 类,如 described here 。请注意,空行(和行分组)对于在 list 中标记 JavaBeans 类非常重要。

Name: SomeBean1.class
Java-Bean: True

Name: SomeBean2.class
Java-Bean: True

Name: SomeBean3.class
Java-Bean: True

尝试的解决方案列表(这些不起作用):

  1. 此代码仅在使用 Maven jar 插件(而非阴影)时有效。

      <plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-jar-plugin</artifactId>
    <configuration>
    <archive>
    <manifestFile>src/main/resources/META-INF/MANIFEST.MF</manifestFile>
    </archive>
    </configuration>
    </plugin>
  2. This link说“与这里的所有示例一样,此配置可以在所有使用 Maven Archiver 的插件中使用,而不仅仅是本示例中的 Maven-jar-plugin。”根据该建议,我尝试了以下代码,但这也不起作用。 (Maven 仍然用默认的 list 文件替换了我的 list 文件。)

        <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>
    <archive>
    <manifestFile>src/main/resources/META-INF/MANIFEST.MF</manifestFile>
    </archive>
    <shadedArtifactAttached>true</shadedArtifactAttached>
    <shadedClassifierName>core</shadedClassifierName>
    <createDependencyReducedPom>false</createDependencyReducedPom>
    <minimizeJar>true</minimizeJar>
    </configuration>
    </execution>
    </executions>
    </plugin>
  3. 我无法将阴影“ManifestResourceTransformer”用作 described here出于以下原因来完成这项工作。我需要将 JavaBeans 类添加到我的 list 文件中,如上面“其他详细信息”下所述。但是,如果我使用 ManifestResourceTransformer 阴影添加 list 条目,这些条目将以不可预测的(看似随机的)顺序插入到 list 文件中。对于指定 JavaBeans 类, list 条目的顺序(行顺序)很重要。

  4. 我尝试使用 IncludeResourceTransformer,但以下代码产生以下错误:“创建着色 jar 时出错:重复条目:META-INF/MANIFEST.MF”。

                    <configuration> <shadedArtifactAttached>true</shadedArtifactAttached>
    <shadedClassifierName>core</shadedClassifierName><createDependencyReducedPom>false</createDependencyReducedPom>
    <minimizeJar>true</minimizeJar>
    <transformers>
    <transformer implementation="org.apache.maven.plugins.shade.resource.IncludeResourceTransformer">
    <resource>META-INF/MANIFEST.MF</resource>
    <file>src/main/resources/META-INF/MANIFEST.MF</file>
    </transformer>
    </transformers>
    </configuration>

最佳答案

以下 pom 配置允许程序员使用自定义 list 文件替换 Apache Maven Shade 插件创建的 list 文件。自定义 list 文件应放置在maven项目中的此目录中:“src/main/resources/META-INF/MANIFEST.MF”

        <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>

<!-- Don't do this: Avoid adding anything that makes shade create or modify a manifest file.
<transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
<mainClass>com.mypackage.MyMainClass</mainClass>
</transformer>
-->

<!-- Add a transformer to exclude any other manifest files (possibly from dependencies). -->
<transformer implementation="org.apache.maven.plugins.shade.resource.DontIncludeResourceTransformer">
<resource>MANIFEST.MF</resource>
</transformer>

<!-- Add a transformer to include your custom manifest file. -->
<transformer implementation="org.apache.maven.plugins.shade.resource.IncludeResourceTransformer">
<resource>META-INF/MANIFEST.MF</resource>
<file>src/main/resources/META-INF/MANIFEST.MF</file>
</transformer>

</transformers>
</configuration>
</execution>
</executions>
</plugin>

关于maven - 使用 Maven Shade 插件时如何指定自定义 MANIFEST.MF 文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38243222/

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