【问题标题】:Invalid signature file digest for Manifest main attributes w/ Jetty and Maven Shade Plugin带有 Jetty 和 Maven Shade 插件的 Manifest 主要属性的签名文件摘要无效
【发布时间】:2015-11-22 10:24:38
【问题描述】:

我已经看到了一些关于这个主题的其他 SO Q&A,但到目前为止,没有一个解决方案对我有用:

我们将 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

【问题讨论】:

    标签: java jetty maven-shade-plugin


    【解决方案1】:

    看起来这是 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 个违规文件。

    可以通过添加到 POM 的 maven-shade-plugin 排除不需要的文件:

    <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 为我们工作。

    【讨论】:

      猜你喜欢
      • 2021-05-17
      • 2018-10-05
      • 2019-12-18
      • 2015-11-14
      • 2019-03-03
      • 1970-01-01
      • 2012-08-29
      • 2016-04-23
      • 2018-11-13
      相关资源
      最近更新 更多