当前位置: 首页 > 知识库问答 >
问题:

如何指定自定义清单。使用迷宫阴影插件时的MF文件?

商开宇
2023-03-14

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

其他详细信息:

我的自html" target="_blank">定义清单文件位于“src/main/resources/META-INF/manifest.MF”中。Maven没有包含我的文件,而是在最终的jar中替换为默认的Maven清单文件。

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

Name: SomeBean1.class
Java-Bean: True

Name: SomeBean2.class
Java-Bean: True

Name: SomeBean3.class
Java-Bean: True

尝试的解决方案列表(这些解决方案无效):

>

  • 此代码仅在使用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>
    

    这个链接说“和这里的所有例子一样,这个配置可以在所有使用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”来完成这项工作,原因如下。我需要将JavaBeans类添加到我的清单文件中,如上面“附加细节”中所述。但是,如果我使用shade manifest resource transformer添加清单条目,这些条目将以不可预测的(看似随机的)顺序插入清单文件。对于指定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>
    
  • 共有1个答案

    欧阳元魁
    2023-03-14

    以下 pom 配置允许程序员将 Apache Maven Shade 插件创建的清单文件替换为自定义清单文件。自定义清单文件应放置在 maven 项目的此目录中:“src/主/资源/元 INF/清单。中频”

            <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战争插件来使用自定义清单。中频。正如我从文档中读到的那样,你可以把你的清单。MF 文件位于 src/主/资源/元 INF/ 中,并将以下配置添加到您的 pom.xml 文件中: 然而,我看到了最美。WebRoot/META-INF中添加的MF是默认值。我找不到哪里出了问题。有什么建议或链接到github项目吗?谢谢

    • 我正试着把版本号放在清单上。我耳朵的MF,基于从SCM检索到的修订号(本例中为svn)。我有一个maven父项目和一些嵌套项目,其中一个负责创建EAR。 这是我的父pom.xml: 这是应用耳朵/pom.xml: 我使用mvn clean包构建项目,并查看ear META-INF/MANIFEST。MF我明白了: 如您所见,buildNumber maven插件中的buildNumber属性为空。

    • 我正在尝试创建一个可绘制的自定义阴影,如下图所示 这不是一个普通的物质阴影,首先它有一个更大的半径,并且在所有方面(顶部,底部,右侧,左侧)都有光环效果。 我试过梯度,但它只有一个圆形半径,在这里不起作用,因为它是矩形的。 我甚至试着把CardView提升到100 DP,但是显然提升是有限制的。 我在网上寻找了一些解决方案,大多数都非常复杂和有限,而另一些则是关于shadow的旧实现(回到Andr

    • 问题内容: 我有一个C#/ Selenium / Specflow测试套件,正在使用xunit.console.exe使用Jenkins运行。我需要将这些测试指向不同的环境(Test / QA / Prod等),并想使用命令行参数。 我正在调用的批处理命令是: 并希望包含一个额外的参数,例如: “ -env = PROD”, 以将该作业指向特定的环境。 我愿意采取更好的方法。 问题答案: 对于此解

    • 以下部分显示了my pom.xml中shade插件的配置: 然而,一些被排除的文件(似乎??)被偷偷地放入输出jar文件中: 那么,阴影插件配置中有什么不正确的地方呢?

    • 问题内容: 我在Java项目中使用log4j。我想配置另一个文件,而不是log4j.properties。有人可以帮助我吗? 问题答案: 使用一次 您只需通过系统参数指定log4j文件的路径: