Details
-
Type:
Bug
-
Status:
Closed
-
Priority:
Major
-
Resolution: Fixed
-
Affects Version/s: maven-archiver-2.4
-
Fix Version/s: maven-archiver-2.5
-
Component/s: maven-archiver
-
Labels:None
-
Environment:Java HotSpot(TM) Client VM (build 1.5.0_13-121)
Description
If you have a maven dependency on an something with an artifactId that contains a '.' in it, it creates an illegal manifest file when trying to create an executable jar file (java -jar foo.jar).
Exception in thread "main" java.io.IOException: invalid header field name: geronimo-jms_1.1_spec-Extension-Name
at java.util.jar.Attributes.read(Attributes.java:409)
at java.util.jar.Manifest.read(Manifest.java:167)
at java.util.jar.Manifest.<init>(Manifest.java:52)
at java.util.jar.JarFile.getManifestFromReference(JarFile.java:158)
at java.util.jar.JarFile.getManifest(JarFile.java:145)
Here's my configuration:
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-jar-plugin</artifactId> <configuration> <archive> <manifest> <mainClass>my.class.Test</mainClass> <addClasspath>true</addClasspath> <addExtensions>true</addExtensions> <classpathPrefix>./lib/</classpathPrefix> </manifest> </archive> </configuration> </plugin>
I added the following dependency:
<dependency> <groupId>org.apache.geronimo.specs</groupId> <artifactId>geronimo-jms_1.1_spec</artifactId> </dependency>
When the maven-archiver tries to create a manifest file with the JARs dependencies it adds the following to the META-INF/MANIFEST.MF file:
geronimo-jms_1.1_spec-Extension-Name: geronimo-jms_1.1_spec geronimo-jms_1.1_spec-Implementation-Version: 1.0
After digging around a bit it turns out that '.' is an illegal character in the "Extension-Name" and "Implementaion-Version" header fields, which leads to the following exception when I try to run "java -jar Test.jar"
java.io.IOException: invalid header field name: geronimo-jms_1.1_spec-Extension-Name
Issue Links
- relates to
-
MSHARED-99
Archiver should validate manifest attribute names.
-
Please find the attached patch file that fixes this issue by replacing '.' with '_' in the artifactId