【问题标题】:Removing Jar Signatures in Gradle Build在 Gradle Build 中删除 Jar 签名
【发布时间】:2016-07-13 13:39:36
【问题描述】:

由于特定于已签名 Jar 的安全异常,我们遇到了从 gradle 构建的战争无法加载到 tomcat 的问题。堆栈跟踪没有显示导致问题的 jar 并且让这个东西运行我想知道我是否可以在构建战争时排除构建中的签名但不知道如何使用 Gradle 来做到这一点。在 Maven 中,我相信它会是一个 <filter><exclude> 标签,但不确定 Gradle 中是否有这种类型的东西。任何输入将不胜感激,抛出的异常如下。

Caused by: java.lang.SecurityException: Invalid signature file digest for 

【问题讨论】:

  • 当您提到“jar”时,您指的是 3rd 方库,还是您自己在 Gradle 构建期间构建的 jar?
  • 另外,你是如何构建战争的?您是通过复制 jars 等然后创建战争来手动完成的,还是使用像“战争”插件这样的插件?

标签: java tomcat gradle jar


【解决方案1】:

要查明 jar 文件是否已签名,您可以使用任何 zip 实用工具解压缩 jar 文件。如果 jar 已签名,它将在 META-INF 文件夹下包含 *.RSA、*.SF 或 *.DSA 等文件。

为了在 gradle build 中排除这些签名文件,我在 build.gradle 中执行了以下操作。如果您使用任何其他插件来创建 jar,则应查看该插件文档以获取更多详细信息。

jar {
from { (configurations.runtime).collect { it.isDirectory() ? it : zipTree(it) } } {
    exclude 'META-INF/*.RSA', 'META-INF/*.SF', 'META-INF/*.DSA'
}
manifest {
    attributes("Main-Class": "com.nk.social.shareit.streams.AppMain")
}}

我的整个 build.gradle 文件如下所列:-

apply plugin: 'scala'

dependencies {
    compile group: 'org.apache.kafka', name: 'kafka-streams', version: '0.11.0.1'
    compile 'org.scala-lang:scala-library:2.12.2'
    compile 'com.sksamuel.elastic4s:elastic4s-core_2.12:5.4.2'
    compile 'com.sksamuel.elastic4s:elastic4s-http_2.12:5.4.2'
    compile 'org.apache.lucene:lucene-core:6.5.1'
    compile 'joda-time:joda-time:2.9.9'
    testCompile group: 'org.scalatest', name: 'scalatest_2.12', version: '3.0.4'
}


jar {
    from { (configurations.runtime).collect { it.isDirectory() ? it : zipTree(it) } } {
        exclude 'META-INF/*.RSA', 'META-INF/*.SF', 'META-INF/*.DSA'
    }
    manifest {
        attributes("Main-Class": "com.nk.social.shareit.streams.AppMain")
    }
}

希望这会有所帮助。

【讨论】:

【解决方案2】:

对于这个线程中给出的 jar,我在构建一个胖 jar 时遇到了问题。

主要动机是构建过程也会跳过一些依赖项。

找到的解决方案如下,它只包含一个小改动

jar {
    manifest {
        attributes(
                'Class-Path': configurations.compile.collect { it.getName() }.join(' '),
                'Main-Class': 'io.vincenzopalazzo.lightning.App'
        )
    }

    from(configurations.runtimeClasspath.collect { it.isDirectory() ? it : zipTree(it) }) {
        exclude 'META-INF/*.RSA', 'META-INF/*.SF', 'META-INF/*.DSA'
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-02-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-08
    • 2019-09-14
    • 2016-08-31
    相关资源
    最近更新 更多