2011-11-28 5 views
12

Ho la seguente eccezione:Maven eccezione vaso ombra tiro

Exception in thread "main" java.lang.SecurityException: no manifiest sezione per voce del file di firma javax/sicurezza/CERT/CertificateException.class a sun.security.util.SignatureFileVerifier.verifySection (SignatureFileVerifier.java:380) a sun.security.util.SignatureFileVerifier.processImpl (SignatureFileVerifier.java:231) a sun.security.util.SignatureFileVerifier.process (SignatureFileVerifier. java: 176) in java.util.jar.JarVerifier.processEntry (JarVerifier.java:288) in java.util.jar.JarVerifier.update (JarVerifier.java:199) in java.util.jar.JarFile.initializeVerifier (JarFile.java:323) in java.util.jar.JarFile.getInputStream (JarFile. java: 388) at sun.misc.URLClassPath $ JarLoader $ 2.getInputStream (URLClassPath.java:692) su sun.misc.Resource.cachedInputStream (Resource.java:61) su sun.misc.Resource.getByteBuffer (Risorsa .java: 144) su java.net.URLClassLoader.defineClass (URLClassLoader.java:256) su java.net.URLClassLoader.access $ 000 (URLClassLoader.java:58) su java.net.URLClassLoader $ 1.run (URLClassLoader .java: 197) a java.security.AccessController.doPrivileged (metodo nativo) su java.net.URLClas sLoader.findClass (URLClassLoader.java:190) a java.lang.ClassLoader.loadClass (ClassLoader.java:306) presso sun.misc.Launcher $ AppClassLoader.loadClass (Launcher.java:301) su java.lang. ClassLoader.loadClass (ClassLoader.java:247) Impossibile trovare la classe principale: com.mainClass. Il programma uscirà.

mio 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> 

risposta

1

Il problema è a causa della versione di Java. Non ho notato che il mio nuovo ide usa automaticamente java di ibm, quando cambio il jre a java di sun, funziona bene :)

0

L'ultima riga del stacktrace sopra dice

Impossibile trovare la classe principale: com.mainClass.

Forse un errore di battitura nel nome di classe o la classe non è compilato prima che il plug-in invocato?

+0

Scusa, non penso che sia il problema del nome. O dovrebbe dare un'eccezione come noclassdeffoundexception. –

26

Il SecurityException si presenta perché una delle vostre dipendenze è un contenitore firmato. Poiché il plug-in per lo schermo sta reimballando questo jar, non è più valido. ->SecurityException al momento del lancio

Per risolvere il problema, è necessario non firmare i barattoli delle dipendenze durante il repacking. Questo può essere fatto semplicemente non repacking i file che compongono il vaso firmato, utilizzando 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> 

Questa soluzione è stata estratta da qui: http://jira.codehaus.org/browse/MSHADE-61