如何使用 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.

但是如果您不想使用阴影插件 -- 抱歉,您被卡住了。