12

我有以下例外:

cachedInputStream(Resource.java:61) at sun.misc.Resource.getByteBuffer(Resource.java:144) at java.net.URLClassLoader.defineClass(URLClassLoader.java:256) at 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. lang.ClassLoader.loadClass(ClassLoader.java:306) at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301) at 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。程序将会退出。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。程序将会退出。

我的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>
4

3 回答 3

27

出现SecurityException是因为您的依赖项之一是签名的 jar。由于 shade 插件正在重新打包这个 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版本。我没有注意到我的新 ide 自动使用 ibm 的 java,当我将 jre 更改为 sun 的 java 时,它运行良好:)

于 2011-12-24T00:34:07.030 回答
0

上面堆栈跟踪的最后一行说

找不到主类:com.mainClass。

也许类名中的拼写错误或在调用插件之前未编译类?

于 2011-11-29T05:32:59.283 回答