我看到了其他一些SO问答;关于这个话题,但到目前为止,没有一个解决方案对我有效:
- "无效的签名文件";尝试运行.jar时
- 线程中的异常";主";java.lang.SecurityException:Manifest主属性的签名文件摘要无效
- JavaFX项目的有效JAR签名
我们将Jetty与Maven Shade插件一起用于开源应用程序:
https://github.com/OneBusAway/onebusaway-gtfs-realtime-from-nextbus-cli
我们在构建中开始出现以下错误:
$ 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)
以下是我们问题跟踪器上的问题:
https://github.com/OneBusAway/onebusaway-gtfs-realtime-from-nextbus-cli/issues/6
看起来这是Jetty:中的一个错误
https://bugs.eclipse.org/bugs/show_bug.cgi?id=371954
来自上述错误报告:
jetty-7.6.1.v20120215所依赖的javax.servlet-2.5.0.v201103041518.jar包存在问题:在javax.servlet jar的META-INF目录中,可以找到文件ECLIPSEF。RSA和ECLIPSEF。SF。
如果你用maven生成一个使用jetty的jar,你会在最后一个jar的META-INF目录中得到这两个文件,如果你运行它,你会得到一个异常:
java.lang.SecurityException: Invalid signature file digest for Manifest main attributes
修复方法是从生成的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>
添加:
<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>
到我们的pom.xml
为我们工作。