【问题标题】:How to configure a manifest file of a jar file by using the maven assembly plugin?如何使用maven组装插件配置jar文件的manifest文件?
【发布时间】:2014-07-31 05:52:50
【问题描述】:

如何配置包含在 Jar 文件中的清单文件的内容?现在我正在使用 maven 程序集插件来配置我的 jar 文件。我已经定义了一些 XML 标签,其中包括 pom.xml 的不同值。

<plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-assembly-plugin</artifactId>
            <configuration>
                <descriptorRefs>
                    <descriptorRef>
                        jar-with-dependencies
                    </descriptorRef>
                </descriptorRefs>
                <archive>
                    <addMavenDescriptor>false</addMavenDescriptor>
                    <manifestEntries>                                   
                        <Source-JDK>${source.jdk}</Source-JDK>
                        <Target-JDK>${target.jdk}</Target-JDK>
                        <GroupId.ArtifactId>${project.groupId}.${project.artifactId}</GroupId.ArtifactId>
                        <Project.Version>${project.version}</Project.Version>                           
                        <Project.Build.SourceEncoding>UTF-8</Project.Build.SourceEncoding>  
                        <Maven.Build.Timestamp>${maven.build.timestamp}</Maven.Build.Timestamp>
                    </manifestEntries>
                    <manifest>                      
                        <addDefaultImplementationEntries>true</addDefaultImplementationEntries>
                        <addDefaultSpecificationEntries>true</addDefaultSpecificationEntries>
                        <addClasspath>true</addClasspath>
                        <classpathPrefix>lib/</classpathPrefix>
                        <mainClass>${project.groupId}.myMainClass</mainClass>
                    </manifest>
                </archive>
                <appendAssemblyId>false</appendAssemblyId>
            </configuration>
            <executions>
                <execution>
                    <id>assembly-jar-Id</id>
                    <phase>package</phase>
                    <goals>
                        <goal>single</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>

在这个解决方案中,我的 jar 文件的清单文件包括所有标签,这对我很重要。但是,如果我使用这些特定标签之一,我会在执行我的 jar 文件期间收到一条错误消息:

 Error: An unexpected error occurred while trying to open file ./myJarFile.jar

如果我删除xml标签“manifestEntries”中的所有特定标签,我可以解决这个问题。

【问题讨论】:

  • 你为什么使用 maven-assembly-plugin 而不是 maven-jar-plugin?我假设您有一个现有的 Maven 项目,并且您想将这些信息添加到 MANIFEST.MF 文件中?

标签: java maven jar maven-assembly-plugin


【解决方案1】:

这可能与清单属性名称中使用了无效字符有关。有效字符为[0-9a-zA-Z_-]。这在 Attributes 类的 JavaDocs 中进行了讨论:

http://docs.oracle.com/javase/7/docs/api/java/util/jar/Attributes.html

另见 jar 文件规范,特别是 headerchar 的语法规范:

http://docs.oracle.com/javase/7/docs/technotes/guides/jar/jar.html#Name-Value_pairs_and_Sections

您的某些属性名称与指定的模式不匹配,例如GroupId.ArtifactId。我建议逐个测试删除每个属性(或更改名称以适应规范),以确认特定属性名称是否导致问题。

【讨论】:

  • 很好的答案,谢谢!您是否有想法,如何使用 maven 程序集插件格式化清单文件中的属性排列?现在所有属性都处于未排序的排列中
  • @MaikHansen,抱歉,不,我不知道控制属性顺序的方法。
猜你喜欢
  • 2017-10-04
  • 1970-01-01
  • 2020-01-02
  • 1970-01-01
  • 2012-05-18
  • 2019-03-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多