12

次の例外があります。

cachedInputStream(Resource.java:61) で 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(Native Method) で java.net.URLClassLoader.findClass(URLClassLoader.java:190) で Java.メインクラスが見つかりませんでした: com.mainClass. プログラムは終了します。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) で sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301) で) java.lang.ClassLoader.loadClass(ClassLoader.java:247) でメイン クラスが見つかりませんでした: com.mainClass。プログラムは終了します。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) で sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301) で) java.lang.ClassLoader.loadClass(ClassLoader.java:247) でメイン クラスが見つかりませんでした: com.mainClass。プログラムは終了します。doPrivileged(Native Method) at java.net.URLClassLoader.findClass(URLClassLoader.java:190) at 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。プログラムは終了します。doPrivileged(Native Method) at java.net.URLClassLoader.findClass(URLClassLoader.java:190) at 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>
4

3 に答える 3

27

SecurityException依存関係の 1 つが署名済みの jar であるため、 が表示されます。シェード プラグインがこの jar を再パックしているため、無効になります。->SecurityException起動時

この問題を解決するには、依存関係の jar を再パックする際に署名を解除する必要がありますこれは、フィルターを使用して、jar を署名するファイルを単純に再パックしないことで実行できます。

<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 から抽出されました。

于 2011-12-20T10:58:59.250 に答える
2

問題は、Java のバージョンが原因です。jreをsunのJavaに変更すると、新しいIDEが自動的にibmのJavaを使用することに気づきませんでした。うまく機能します:)

于 2011-12-24T00:34:07.030 に答える
0

上記のスタックトレースの最後の行は言う

メイン クラスが見つかりませんでした: com.mainClass。

クラス名のタイプミスか、プラグインが呼び出される前にクラスがコンパイルされていない可能性がありますか?

于 2011-11-29T05:32:59.283 に答える