Maven Shade Jar бросить исключение - PullRequest
12 голосов
/ 29 ноября 2011

У меня есть следующее исключение:

Исключение в потоке "main" java.lang.SecurityException: без манифеста раздел для записи файла подписи javax / безопасность / CERT / CertificateException.class at sun.security.util.SignatureFileVerifier.verifySection (SignatureFileVerifier.java:380) at sun.security.util.SignatureFileVerifier.processImpl (SignatureFileVerifier.java:231) at sun.security.util.SignatureFileVerifier.process (SignatureFileVerifier.java:176) в java.util.jar.JarVerifier.processEntry (JarVerifier.java:288) в java.util.jar.JarVerifier.update (JarVerifier.java:199) в java.util.jar.JarFile.initializeVerifier (JarFile.java:323) в java.util.jar.JarFile.getInputStream (JarFile.java:388) at sun.misc.URLClassPath $ JarLoader $ 2.getInputStream (URLClassPath.java:692) at sun.misc.Resource.cachedInputStream (Resource.java:61) at sun.misc.Resource.getByteBuffer (Resource.java:144) в java.net.URLClassLoader.defineClass (URLClassLoader.java:256) на java.net.URLClassLoader.access $ 000 (URLClassLoader.java:58) на java.net.URLClassLoader $ 1.run (URLClassLoader.java:197) at java.security.AccessController.doPrivileged (собственный метод) в java.net.URLClassLoader.findClass (URLClassLoader.java:190) в java.lang.ClassLoader.loadClass (ClassLoader.java:306) at sun.misc.Launcher $ AppClassLoader.loadClass (Launcher.java:301) в java.lang.ClassLoader.loadClass (ClassLoader.java:247) Не удалось найти основной класс: com.mainClass. Программа закроется.

Мой пом:

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

Ответы [ 3 ]

26 голосов
/ 20 декабря 2011

SecurityException появляется, потому что одна из ваших зависимостей - подписанный jar.Когда плагин Shade переупаковывает этот jar-файл, он становится недействительным.-> SecurityException при запуске

Чтобы решить эту проблему, вы должны unsign заполнить зависимости при их перепаковке.Это можно сделать, просто не перепаковывая файлы, которые делают банку подписанной, используя фильтр:

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

Это решение было извлечено отсюда: https://issues.apache.org/jira/browse/MSHADE-61

2 голосов
/ 24 декабря 2011

Проблема из-за версии Java.Я не заметил, что мой новый ide автоматически использует java ibm, когда я заменяю jre на java солнца, он работает хорошо:

0 голосов
/ 29 ноября 2011

Последняя строка приведенной выше трассировки стека говорит

Не удалось найти основной класс: com.mainClass.

Возможно, опечатка в имени класса или в классе не скомпилирована до запуска плагина?

...