Uploaded image for project: 'Maven Shared Components'
  1. Maven Shared Components
  2. MSHARED-134

Using ${artifcactId}-Extention-Name in MANIFEST file can create invalid MANIFEST files

    XMLWordPrintableJSON

Details

    • Bug
    • Status: Closed
    • Major
    • Resolution: Fixed
    • maven-archiver-2.4
    • maven-archiver-2.5
    • maven-archiver
    • None
    • 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

      Attachments

        1. MavenArchiver.java-Patch.txt
          2 kB
          Sridhar Komandur
        2. nautilus-debug-log.txt
          188 kB
          Sridhar Komandur

        Issue Links

          Activity

            People

              krosenvold Kristian Rosenvold
              eniact Todd Caine
              Votes:
              6 Vote for this issue
              Watchers:
              6 Start watching this issue

              Dates

                Created:
                Updated:
                Resolved: