【发布时间】:2019-09-16 11:09:44
【问题描述】:
我正在使用 maven-assembly-plugin 来构建我的部署包。我们的依赖 Jar 之一是 bcprov-jdk15on.jar,它是一个签名的 JAR。我在 maven-assembly-plugin 之上使用 Proguard Shrinking 步骤。 Proguard 基本上从 bcprov-jdk15on.jar 中删除了一些类,这会导致 JVM 加载类时 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.access$100(URLClassLoader.java:74) ~[?:1.8.0_201]
at java.net.URLClassLoader$1.run(URLClassLoader.java:369) ~[?:1.8.0_201]
at java.net.URLClassLoader$1.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
有没有办法使用 maven-assembly-plugin unsign 依赖 jar?
根据this,我需要简单地删除清单文件和所有与签名相关的文件(.SF、.DSA)?有没有办法使用 maven-assembly-plugin 从dependencySets 中排除 META-INF 文件夹?
谢谢。
【问题讨论】:
标签: java maven proguard maven-assembly-plugin