已签名的jar文件上的SBT程序集插件

时间:2016-12-20 00:21:30

标签: scala jar sbt sbt-assembly

我们有一个scala应用程序,它是由命令sbt dist构建的,它使用本机打包程序创建一个zip文件,并将SBT导入的所有jar文件转储到zip文件中。

这对我们有用但是经过一些我们意识到一些jar文件具有相同的类文件(但是版本不同),并且我们得到关于丢失方法等的运行时错误。

所以我们使用sbt assembly并定义了一个合并策略来构建一个具有正确类文件的胖jar。

然而现在在构建胖罐之后我得到了JCE错误

Caused by: java.lang.SecurityException: JCE cannot authenticate the provider BC
    at javax.crypto.Cipher.getInstance(Cipher.java:657)
    at javax.crypto.Cipher.getInstance(Cipher.java:596)
    at org.bouncycastle.jcajce.util.NamedJcaJceHelper.createCipher(Unknown Source)
    at org.bouncycastle.openpgp.operator.jcajce.OperatorHelper.createCipher(Unknown Source)
    at org.bouncycastle.openpgp.operator.jcajce.JcePBESecretKeyDecryptorBuilder$1.recoverKeyData(Unknown Source)
    ... 24 more
Caused by: java.util.jar.JarException: file:/fat.jar has unsigned entries - -base__DDLMigration.sql
    at javax.crypto.JarVerifier.verifySingleJar(JarVerifier.java:464)
    at javax.crypto.JarVerifier.verifyJars(JarVerifier.java:322)
    at javax.crypto.JarVerifier.verify(JarVerifier.java:250)
    at javax.crypto.JceSecurity.verifyProviderJar(JceSecurity.java:160)
    at javax.crypto.JceSecurity.getVerificationResult(JceSecurity.java:186)
    at javax.crypto.Cipher.getInstance(Cipher.java:653)

所以似乎jar文件已签名,当我们将各个jar文件转储到zip文件中时,一切正常。现在,当我们将单个类移动到胖罐中时,签名就会丢失。

因此,对于已签名的jar文件中的每个类,现在被移动到胖罐,我们会收到错误,因为胖罐丢失了原始jar的签名信息。

0 个答案:

没有答案