如何使用 maven-assembly-plugin 从 dependencySet 中删除 META-INF?
How to remove META-INF from dependencySet using maven-assembly-plugin?
我正在使用 maven-assembly-plugin 构建我的部署包。我们的依赖项 Jar 之一是 bcprov-jdk15on.jar
,它是一个签名的 JAR。我在 maven-assembly-plugin 之上使用 Proguard Shrinking 步骤。 Proguard 基本上从 bcprov-jdk15on.jar 中删除了一些 classes,这会导致 JVM 加载 class.
时 JAR 签名验证失败
我收到此错误堆栈跟踪
java.lang.SecurityException: SHA-256 digest error for org/bouncycastle/tsp/TSPException.class
at sun.security.util.ManifestEntryVerifier.verify(ManifestEntryVerifier.java:223) ~[?:1.8.0_201]
at java.util.jar.JarVerifier.processEntry(JarVerifier.java:243) ~[?:1.8.0_201]
at java.util.jar.JarVerifier.update(JarVerifier.java:230) ~[?:1.8.0_201]
at java.util.jar.JarVerifier$VerifierStream.read(JarVerifier.java:484) ~[?:1.8.0_201]
at sun.misc.Resource.getBytes(Resource.java:124) ~[?:1.8.0_201]
at java.net.URLClassLoader.defineClass(URLClassLoader.java:463) ~[?:1.8.0_201]
at java.net.URLClassLoader.access0(URLClassLoader.java:74) ~[?:1.8.0_201]
at java.net.URLClassLoader.run(URLClassLoader.java:369) ~[?:1.8.0_201]
at java.net.URLClassLoader.run(URLClassLoader.java:363) ~[?:1.8.0_201]
at java.security.AccessController.doPrivileged(Native Method) ~[?:1.8.0_201]
at java.net.URLClassLoader.findClass(URLClassLoader.java:362) ~[?:1.8.0_201]
at java.lang.ClassLoader.loadClass(ClassLoader.java:424) ~[?:1.8.0_201]
at java.lang.ClassLoader.loadClass(ClassLoader.java:357) ~[?:1.8.0_201]
我可以简单地在我的 Proguard 配置上使用 keep
选项来完成这项工作(没有签名验证错误)。然而,由于这个 JAR 的大小相当大 (4MB),我想实际使用它来对抗这个特定的 bcprov-jdk15on.jar
有没有办法 unsign
使用 maven-assembly-plugin 的依赖 jar?
根据this,我需要简单地删除清单文件和所有签名相关文件(.SF、.DSA)吗?有没有办法使用 maven-assembly-plugin 从 dependencySets 中排除 META-INF 文件夹?
谢谢。
maven 程序集插件无法做到这一点。
来自文档:
If your project wants to package your artifact in an uber-jar, the
assembly plugin provides only basic support. For more control, use the Maven Shade Plugin.
但是如果您不想使用阴影插件 -- 抱歉,您被卡住了。
我正在使用 maven-assembly-plugin 构建我的部署包。我们的依赖项 Jar 之一是 bcprov-jdk15on.jar
,它是一个签名的 JAR。我在 maven-assembly-plugin 之上使用 Proguard Shrinking 步骤。 Proguard 基本上从 bcprov-jdk15on.jar 中删除了一些 classes,这会导致 JVM 加载 class.
我收到此错误堆栈跟踪
java.lang.SecurityException: SHA-256 digest error for org/bouncycastle/tsp/TSPException.class
at sun.security.util.ManifestEntryVerifier.verify(ManifestEntryVerifier.java:223) ~[?:1.8.0_201]
at java.util.jar.JarVerifier.processEntry(JarVerifier.java:243) ~[?:1.8.0_201]
at java.util.jar.JarVerifier.update(JarVerifier.java:230) ~[?:1.8.0_201]
at java.util.jar.JarVerifier$VerifierStream.read(JarVerifier.java:484) ~[?:1.8.0_201]
at sun.misc.Resource.getBytes(Resource.java:124) ~[?:1.8.0_201]
at java.net.URLClassLoader.defineClass(URLClassLoader.java:463) ~[?:1.8.0_201]
at java.net.URLClassLoader.access0(URLClassLoader.java:74) ~[?:1.8.0_201]
at java.net.URLClassLoader.run(URLClassLoader.java:369) ~[?:1.8.0_201]
at java.net.URLClassLoader.run(URLClassLoader.java:363) ~[?:1.8.0_201]
at java.security.AccessController.doPrivileged(Native Method) ~[?:1.8.0_201]
at java.net.URLClassLoader.findClass(URLClassLoader.java:362) ~[?:1.8.0_201]
at java.lang.ClassLoader.loadClass(ClassLoader.java:424) ~[?:1.8.0_201]
at java.lang.ClassLoader.loadClass(ClassLoader.java:357) ~[?:1.8.0_201]
我可以简单地在我的 Proguard 配置上使用 keep
选项来完成这项工作(没有签名验证错误)。然而,由于这个 JAR 的大小相当大 (4MB),我想实际使用它来对抗这个特定的 bcprov-jdk15on.jar
有没有办法 unsign
使用 maven-assembly-plugin 的依赖 jar?
根据this,我需要简单地删除清单文件和所有签名相关文件(.SF、.DSA)吗?有没有办法使用 maven-assembly-plugin 从 dependencySets 中排除 META-INF 文件夹?
谢谢。
maven 程序集插件无法做到这一点。
来自文档:
If your project wants to package your artifact in an uber-jar, the assembly plugin provides only basic support. For more control, use the Maven Shade Plugin.
但是如果您不想使用阴影插件 -- 抱歉,您被卡住了。