1

在我简单的 gradle 构建中,我想一起使用 ShadowJar 和 ProGuard。我找到了一些示例,其中 shadowJar 任务的输出是 proguard 的输入,效果很好,但是在我的情况下,我希望首先创建一个小的混淆 jar,在那里我很好地指定了库依赖项并让 proguard 只关注在我的代码上,然后我想将它传递给用于 fatjar 打包的 shadowjar 插件。

我的设置如下:

task obfuscate(type: proguard.gradle.ProGuardTask) {
    injars jar
    outjars "build/libs/foo-${project.version}-pg.jar"
    ...
}

shadowJar {
  from obfuscate
  configurations = [project.configurations.embed]
}

shadowJar.dependsOn obfuscate

我的问题是 shadowJar 输出包含所有未混淆的库(很好)、我的混淆代码(很好)和我的未混淆代码。所以不知何故,原来的课程偷偷溜进来,我不明白这是怎么回事。我无法指定 shadowJar 将依赖项和 proguard 输出 jar 打包在一起。

您看到我的方法中的问题在哪里吗?

4

1 回答 1

0

试试这个,对我有用:

task shadowJar2( type: com.github.jengelman.gradle.plugins.shadow.tasks.ShadowJar ) {
    baseName = jar.baseName
    from obfuscate
    configurations = [project.configurations.embed]
    classifier = 'shadow'
    //version =
}

问题是除了混淆的 + 库 jar 之外,默认的 shadowJar 任务还需要您的“主要”源集。通过定义您自己的自定义“shadowJar2”任务,您明确定义了您的源,在这种情况下,它只是 jars(“混淆”+“嵌入”)而不是源集。

于 2017-12-21T06:12:42.417 回答