Java 带有Jetty和Maven Shade插件的清单主属性的签名文件摘要无效
我已经看到了一些关于这个话题的其他问答,但到目前为止,没有一个解决方案对我有效:Java 带有Jetty和Maven Shade插件的清单主属性的签名文件摘要无效,java,jetty,maven-shade-plugin,Java,Jetty,Maven Shade Plugin,我已经看到了一些关于这个话题的其他问答,但到目前为止,没有一个解决方案对我有效: 我们将Jetty与Maven Shade插件一起用于开源应用程序: 我们在生成中开始出现以下错误: $ java -jar onebusaway-gtfs-realtime-from-nextbus-cli.jar Error: A JNI error has occurred, please check your installation and try again Exception in thre
$ java -jar onebusaway-gtfs-realtime-from-nextbus-cli.jar
Error: A JNI error has occurred, please check your installation and try again
Exception in thread "main" java.lang.SecurityException: Invalid signature file digest for Manifest main attributes
at sun.security.util.SignatureFileVerifier.processImpl(Unknown Source)
at sun.security.util.SignatureFileVerifier.process(Unknown Source)
at java.util.jar.JarVerifier.processEntry(Unknown Source)
at java.util.jar.JarVerifier.update(Unknown Source)
at java.util.jar.JarFile.initializeVerifier(Unknown Source)
at java.util.jar.JarFile.getInputStream(Unknown Source)
at sun.misc.URLClassPath$JarLoader$2.getInputStream(Unknown Source)
at sun.misc.Resource.cachedInputStream(Unknown Source)
at sun.misc.Resource.getByteBuffer(Unknown Source)
at java.net.URLClassLoader.defineClass(Unknown Source)
at java.net.URLClassLoader.access$100(Unknown Source)
at java.net.URLClassLoader$1.run(Unknown Source)
at java.net.URLClassLoader$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.launcher.LauncherHelper.checkAndLoadMain(Unknown Source)
以下是我们的问题追踪器上的问题:
看起来这是Jetty中的一个bug: 从上述错误报告中: jetty-7.6.1.v20120215所依赖的javax.servlet-2.5.0.v201103041518.jar打包存在一个问题:在javax.servlet-jar的META-INF目录中找到文件ECLIPSEF.RSA和ECLIPSEF.SF 如果您使用使用jetty的maven生成了一个jar,那么您会在最后一个jar的META-INF目录中得到这两个文件,如果您运行它,您会得到一个异常:
java.lang.SecurityException:清单主属性的签名文件摘要无效
修复方法是从生成的jar中排除2个有问题的文件
通过将maven shade插件添加到POM,可以排除不需要的文件:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>1.4</version>
<executions>
<execution>
<goals>
<goal>shade</goal>
</goals>
<configuration>
<filters>
<filter>
<artifact>org.eclipse.jetty.orbit:javax.servlet</artifact>
<excludes>
<exclude>META-INF/ECLIPSEF.RSA</exclude>
<exclude>META-INF/ECLIPSEF.SF</exclude>
<exclude>META-INF/eclipse.inf</exclude>
</excludes>
</filter>
</filters>
</configuration>
</execution>
</executions>
</plugin>
org.apache.maven.plugins
maven阴影插件
1.4
阴凉处
org.eclipse.jetty.orbit:javax.servlet
META-INF/ECLIPSEF.RSA
META-INF/ECLIPSEF.SF
META-INF/eclipse.INF
添加:
<filters>
<filter>
<artifact>org.eclipse.jetty.orbit:javax.servlet</artifact>
<excludes>
<exclude>META-INF/ECLIPSEF.RSA</exclude>
<exclude>META-INF/ECLIPSEF.SF</exclude>
<exclude>META-INF/eclipse.inf</exclude>
</excludes>
</filter>
</filters>
org.eclipse.jetty.orbit:javax.servlet
META-INF/ECLIPSEF.RSA
META-INF/ECLIPSEF.SF
META-INF/eclipse.INF
。。。我们的pom.xml
为我们工作