【发布时间】:2016-11-09 15:20:40
【问题描述】:
当项目使用 Maven-jar-plugin 时,很容易在 jar 中包含自定义清单文件,但我找不到使用 Maven shade 做同样事情的方法。在使用“Maven-shade-plugin”时如何使用我自己的清单文件?
其他详情:
我的自定义清单文件位于“src/main/resources/META-INF/MANIFEST.MF”中。 Maven 不包括我的文件,而是在最终 jar 中用默认的 Maven 清单文件替换它。
我需要自定义清单文件的原因是在我的清单中指定一些 JavaBeans 类,用于摆动组件库。应在清单文件中按以下格式指定多个 JavaBeans 类,如described here。请注意,空行(和行分组)对于在清单中标记 JavaBeans 类很重要。
Name: SomeBean1.class
Java-Bean: True
Name: SomeBean2.class
Java-Bean: True
Name: SomeBean3.class
Java-Bean: True
尝试的解决方案列表(这些都不起作用):
-
此代码仅在使用 Maven jar 插件(不是 shade)时有效。
<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> -
This link 表示“与此处的所有示例一样,此配置可用于所有使用 Maven Archiver 的插件,而不仅仅是本示例中的 Maven-jar-plugin。”根据该建议,我尝试了以下代码,但这也不起作用。 (Maven 仍然用默认的清单文件替换了我的清单文件。)
<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> 我不能使用阴影“ManifestResourceTransformer”作为described here 来完成这项工作,原因如下。我需要将 JavaBeans 类添加到我的清单文件中,如上文“其他详细信息”下所述。但是,如果我使用阴影 ManifestResourceTransformer 添加清单条目,这些条目将以不可预测的(看似随机的)顺序插入到清单文件中。对于指定 JavaBeans 类,清单条目的顺序(行顺序)很重要。
-
我尝试使用 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>
【问题讨论】:
标签: maven javabeans maven-shade-plugin manifest.mf