Gradle ShadowJar输出包含模糊和非模糊类

时间:2017-04-26 20:06:25

标签: gradle proguard shadowjar

在我简单的gradle构建中,我想一起使用ShadowJar和ProGuard。我有found examples其中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打包在一起。

你看到我的方法出现问题了吗?

1 个答案:

答案 0 :(得分:0)

试试这个,对我有用:

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

问题是默认的shadowJar任务需要你的主要任务。 sourceset除了混淆+库jar之外。通过定义自己的自定义' shadowJar2'任务,您明确定义了您的来源,在这种情况下只是jars(' obfuscate' +' embed')而不是源集。