Invalid signature file digest for Manifest main attributes

正常使用打包插件如文档.

  <build>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.pluginsgroupId>
        <artifactId>maven-shade-pluginartifactId>
        <version>3.3.0version>
        <executions>
          <execution>
            <phase>packagephase>
            <goals>
              <goal>shadegoal>
            goals>
            <configuration>
              <transformers>
                <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
                  <mainClass>com.jimo.MainmainClass>
                transformer>
              transformers>
            configuration>
          execution>
        executions>
      plugin>
    plugins>
  build>

Invalid signature file digest for Manifest main attributes

但有时我们在打完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.ensureInitialization(Unknown Source)
        at java.util.jar.JavaUtilJarAccessImpl.ensureInitialization(Unknown Source)
        at sun.misc.URLClassPath$JarLoader$2.getManifest(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)

这是由于混在一起后,很多其他文件在 META-INF下导致的,比如下面的 ECLIPSE.RSA, ECLIPSE.SF.

Invalid signature file digest for Manifest main attributes_第1张图片

解决办法很简单,要么手动删除,要么通过插件配置过滤:

    <configuration>
        <transformers>
            <transformer
                    implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
                <mainClass>org.urbcomp.start.db.test.MiniHBaseClustermainClass>
            transformer>
        transformers>
        <filters>
            <filter>
                <artifact>*:*artifact>
                <excludes>
                    <exclude>META-INF/*.SFexclude>
                    <exclude>META-INF/*.DSAexclude>
                    <exclude>META-INF/*.RSAexclude>
                excludes>
            filter>
        filters>
    configuration>

你可能感兴趣的:(Java,maven,shade,fat-jar,jar)