2011-11-28 12 views
12

tengo la siguiente excepción:Maven excepción tarro de sombra tiro

Excepción en el hilo "principal" java.lang.SecurityException: sección sin Manifiesto para la entrada de archivo de la firma javax/security/cert/CertificateException.class en sun.security.util.SignatureFileVerifier.verifySection (SignatureFileVerifier.java:380) en sun.security.util.SignatureFileVerifier.processImpl (SignatureFileVerifier.java:231) en sun.security.util.SignatureFileVerifier.process (SignatureFileVerifier. java: 176) en java.util.jar.JarVerifier.processEntry (JarVerifier.java:288) en java.util.jar.JarVerifier.update (JarVerifier.java:199) en java.util.jar.JarFile.initializeVerifier (JarFile.java:323) en java.util.jar.JarFile.getInputStream (JarFile. java: 388) en sun.misc.URLClassPath $ JarLoader $ 2.getInputStream (URLClassPath.java:692) en sun.misc.Resource.cachedInputStream (Resource.java:61) en sun.misc.Resource.getByteBuffer (Resource .java: 144) en java.net.URLClassLoader.defineClass (URLClassLoader.java:256) en java.net.URLClassLoader.access $ 000 (URLClassLoader.java:58) en java.net.URLClassLoader $ 1.run (URLClassLoader .java: 197) en java.security.AccessController.doPrivileged (método nativo) en java.net.URLClas sLoader.findClass (URLClassLoader.java:190) en java.lang.ClassLoader.loadClass (ClassLoader.java:306) en sun.misc.Launcher $ AppClassLoader.loadClass (Launcher.java:301) en java.lang. ClassLoader.loadClass (ClassLoader.java:247) No se pudo encontrar la clase principal: com.mainClass. Programa saldrá.

Mi pom:

<plugins> 
      <plugin> 
       <groupId>org.apache.maven.plugins</groupId> 
        <artifactId>maven-shade-plugin</artifactId> 
       <version>1.5</version> 
      <executions> 
       <execution> 
        <phase>package</phase> 
        <goals> 
         <goal>shade</goal> 
        </goals> 
        <configuration> 
         <filter> 
          <excludes> 
           <exclude>META-INF/*.SF</exclude> 
           <exclude>META-INF/*.DSA</exclude> 
           <exclude>META-INF/*.RSA</exclude> 
          </excludes> 
         </filter> 
         <transformers> 
          <transformer 
           implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer"> 
           <mainClass>com.mainClass</mainClass> 
          </transformer> 
         </transformers> 
        </configuration> 
       </execution> 
      </executions> 
     </plugin> 
    </plugins> 

Respuesta

1

El problema se debe a que la versión de Java. No me di cuenta de que mi nuevo ide automáticamente usa ibm's java, cuando cambio el jre al java del sol, funciona bien :)

0

La última línea de la StackTrace arriba dice

No se pudo encontrar la clase principal: com.mainClass.

¿Quizás un error tipográfico en el nombre de clase o la clase no se compila antes de invocar el complemento?

+0

Lo siento, no creo que sea el problema del nombre. O debería dar una excepción como noclassdeffoundexception. –

26

Aparece el SecurityException porque una de sus dependencias es un jar firmado. Como el plugin de sombreado reembala este frasco, se vuelve inválido. ->SecurityException en el lanzamiento

Para resolver el problema, hay que unsign los frascos de dependencia, mientras que volver a embalar ellos. Esto puede hacerse simplemente no volver a empaquetar los archivos que componen el frasco firmado, usando un filtro:

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-shade-plugin</artifactId> 
    <version>1.5</version> 
    <executions> 
     <execution> 
      <id>stand-alone</id> 
      <phase>package</phase> 
      <goals> 
       <goal>shade</goal> 
      </goals> 
      <configuration> 
       <shadedArtifactAttached>true</shadedArtifactAttached> 
       <shadedClassifierName>stand-alone</shadedClassifierName> 
       <filters> 
        <filter> 
         <!-- 
          Exclude files that sign a jar 
          (one or multiple of the dependencies). 
          One may not repack a signed jar without 
          this, or you will get a 
          SecurityException at program start. 
         --> 
         <artifact>*:*</artifact> 
         <excludes> 
          <exclude>META-INF/*.SF</exclude> 
          <exclude>META-INF/*.RSA</exclude> 
          <exclude>META-INF/*.INF</exclude> <!-- This one may not be required --> 
         </excludes> 
        </filter> 
       </filters> 
      </configuration> 
     </execution> 
    </executions> 
</plugin> 

Esta solución se extrae de aquí: http://jira.codehaus.org/browse/MSHADE-61

Cuestiones relacionadas