Подтвердить что ты не робот

Исключение исключения из тени Maven

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

Исключение в потоке "main" java.lang.SecurityException: no manifestiest раздел для записи файла подписи 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)         в 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. Программа выйдет.

Мой 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>
4b9b3361

Ответ 1

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

Ответ 2

SecurityException появляется, потому что одна из ваших зависимостей - это подписанная банка. Поскольку плагин с оттенком переупаковывает эту банку, он становится недействительным. → SecurityException при запуске

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

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

Это решение было извлечено здесь: http://jira.codehaus.org/browse/MSHADE-61

Ответ 3

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

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

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