如何使用maven程序集插件配置jar文件的清单文件?

时间:2014-07-31 05:52:51

标签: java maven jar maven-assembly-plugin

如何配置清单文件的内容,该文件包含在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”中的所有特定标签,我可以解决这个问题。

1 个答案:

答案 0 :(得分:0)

这可能与清单属性名称中无效字符的使用有关。有效字符为[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。我建议逐个测试每个属性的删除(或更改名称以符合规范),以确认特定属性名称是否导致问题。