sonatype / jarjar-maven-plugin

Repackage and embed dependencies
http://sonatype.github.com/jarjar-maven-plugin
Apache License 2.0
25 stars 7 forks source link

Invalid signature file digest when jarjar'ing signed dependencies #7

Closed mgenov closed 11 years ago

mgenov commented 11 years ago

I'm trying to include dependency javax.servlet dependency and it seems that jarjar-maven-plugin is failing to package it.

jajar-maven-plugin - version - 7.0

and this is the include line:

<include>org.eclipse.jetty.orbit:javax.servlet</include>

Here is the stack trace: Caused by: org.apache.maven.plugin.MojoExecutionException: Unable to JarJar: /target/myapp-1.0-SNAPSHOT.jar cause: ZIP file must have at least one entry at com.tonicsystems.jarjar.JarJarMojo.execute(JarJarMojo.java:256) at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:101) at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:209) ... 19 more Caused by: java.util.zip.ZipException: ZIP file must have at least one entry at java.util.zip.ZipOutputStream.finish(ZipOutputStream.java:304) at java.util.zip.DeflaterOutputStream.close(DeflaterOutputStream.java:140) at java.util.zip.ZipOutputStream.close(ZipOutputStream.java:321) at com.tonicsystems.jarjar.util.StandaloneJarProcessor.run(StandaloneJarProcessor.java:66) at com.tonicsystems.jarjar.JarJarMojo.execute(JarJarMojo.java:223) ... 21 more

Where when I remove this line, everything is packaging like a charm.

mcculls commented 11 years ago

Can you attach a complete pom.xml that demonstrates the issue? Thanks in advance.

mgenov commented 11 years ago

Yeah. Here is my pom.xml.

<?xml version="1.0"?>
<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <modelVersion>4.0.0</modelVersion>

  <groupId>com.mycompany</groupId>
  <artifactId>myproject</artifactId>
  <version>1.0-SNAPSHOT</version>
  <name>myproject</name>
  <url>http://maven.apache.org</url>

  <dependencies>

    <!-- DI (Guice related dependencies)-->
    <dependency>
      <groupId>com.google.inject</groupId>
      <artifactId>guice</artifactId>
      <version>3.0</version>
    </dependency>

    <dependency>
      <groupId>com.google.inject.extensions</groupId>
      <artifactId>guice-servlet</artifactId>
      <version>3.0</version>
    </dependency>

    <!-- Utility dependencies -->
    <dependency>
      <groupId>com.google.guava</groupId>
      <artifactId>guava</artifactId>
      <version>14.0.1</version>
    </dependency>

    <!-- HTTP Server Dependencies -->
    <dependency>
      <groupId>org.eclipse.jetty</groupId>
      <artifactId>jetty-server</artifactId>
      <version>8.1.8.v20121106</version>      
    </dependency>

    <!-- Logging Dependencies -->
    <dependency>
      <groupId>ch.qos.logback</groupId>
      <artifactId>logback-classic</artifactId>
      <version>0.9.30</version>
    </dependency>

    <!-- Testing Libraries -->
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.9</version>
    </dependency>

    <dependency>
      <groupId>org.jmock</groupId>
      <artifactId>jmock</artifactId>
      <version>2.6.0</version>
      <scope>test</scope>
    </dependency>

    <dependency>
      <groupId>org.jmock</groupId>
      <artifactId>jmock-junit4</artifactId>
      <version>2.6.0</version>
      <scope>test</scope>
    </dependency>

    <dependency>
      <groupId>org.hamcrest</groupId>
      <artifactId>hamcrest-all</artifactId>
      <version>1.3</version>
      <scope>test</scope>
    </dependency>

  </dependencies>

  <build>
    <plugins>
      <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-surefire-plugin</artifactId>
            <version>2.8.1</version>
          </plugin>

          <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-jar-plugin</artifactId>
            <version>2.4</version>
            <configuration>
              <archive>
                <manifest>
                  <mainClass>com.xxx.xxx.xxx.Bootstrap</mainClass>
                </manifest>
              </archive>
            </configuration>
          </plugin>

          <plugin>
            <groupId>org.sonatype.plugins</groupId>
            <artifactId>jarjar-maven-plugin</artifactId>
            <version>1.7</version>
            <executions>
              <execution>
                <phase>package</phase>
                <goals>
                  <goal>jarjar</goal>
                </goals>
                <configuration>
                  <includes>
                    <include>javax.inject:javax.inject</include>
                    <include>ch.qos.logback:logback-classic</include>
                    <include>aopalliance:aopalliance</include>
                    <include>com.google.guava:guava</include>
                    <include>com.google.inject:guice</include>
                    <include>com.google.inject.extensions:guice-servlet</include>
                    <include>ch.qos.logback:logback-core</include>
                    <include>org.slf4j:slf4j-api</include>
                    <include>org.eclipse.jetty.orbit:javax.servlet</include>
                    <include>org.eclipse.jetty:jetty-server</include>
                    <include>org.eclipse.jetty:jetty-servlet</include>
                    <include>org.eclipse.jetty:jetty-http</include>
                    <include>org.eclipse.jetty:jetty-util</include>
                    <include>org.eclipse.jetty:jetty-continuation</include>
                    <include>org.eclipse.jetty:jetty-security</include>
                  </includes>

                  <rules>

                    <rule>
                      <pattern>org.objectweb.asm.**</pattern>
                      <result>com.google.inject.internal.asm.@1</result>
                    </rule>

                    <rule>
                      <pattern>net.sf.cglib.**</pattern>
                      <result>com.google.inject.internal.cglib.@1</result>
                    </rule>

                    <keep>
                      <pattern>com.xxx.**</pattern>
                    </keep>

                  </rules>
                </configuration>
              </execution>
            </executions>
          </plugin>

    </plugins>

  </build>

</project>
mcculls commented 11 years ago

FYI, an exception in the finally block of StandaloneJarProcessor was hiding the true cause:

java.lang.SecurityException: Invalid signature file digest for Manifest main attributes
    at sun.security.util.SignatureFileVerifier.processImpl(SignatureFileVerifier.java:219)
    at sun.security.util.SignatureFileVerifier.process(SignatureFileVerifier.java:174)
    at java.util.jar.JarVerifier.processEntry(JarVerifier.java:288)
    at java.util.jar.JarVerifier.update(JarVerifier.java:199)
    at java.util.jar.JarFile.initializeVerifier(JarFile.java:327)
    at java.util.jar.JarFile.getInputStream(JarFile.java:395)
    at com.tonicsystems.jarjar.util.StandaloneJarProcessor.run(StandaloneJarProcessor.java:46)
    at com.tonicsystems.jarjar.JarJarMojo.execute(JarJarMojo.java:223)
    at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:101)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:209)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:153)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:145)
    at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:84)
    at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:59)
    at org.apache.maven.lifecycle.internal.LifecycleStarter.singleThreadedBuild(LifecycleStarter.java:183)
    at org.apache.maven.lifecycle.internal.LifecycleStarter.execute(LifecycleStarter.java:161)
    at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:320)
    at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:156)
    at org.apache.maven.cli.MavenCli.execute(MavenCli.java:537)
    at org.apache.maven.cli.MavenCli.doMain(MavenCli.java:196)
    at org.apache.maven.cli.MavenCli.main(MavenCli.java:141)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:597)
    at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced(Launcher.java:290)
    at org.codehaus.plexus.classworlds.launcher.Launcher.launch(Launcher.java:230)
    at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode(Launcher.java:409)
    at org.codehaus.plexus.classworlds.launcher.Launcher.main(Launcher.java:352)

Which makes more sense - I'll look into handling this and improve the error reporting at the same time.

mcculls commented 11 years ago

Made sure the original cause was not hidden in d3f8e05c4330a051fe2dd75a6ce5e63d419531fb

mcculls commented 11 years ago

Fixed in e8ce1f6fb94dcf2a7ea959cd49dbdc587bf3a818 - can you try the 1.8-SNAPSHOT locally to confirm this works for you?

mgenov commented 11 years ago

Works fine. Thanks.

mcculls commented 11 years ago

I've just staged and released 1.8 with this bugfix; should be available from central later today.