在我的简单gradle构建中,我希望同时使用ShadowJar和ProGuard。我有found examples,其中shadowJar任务的输出是proguard任务的输入,它工作得很好,但是在我的例子中,我更喜欢首先创建一个小的混淆jar,在那里我很好地指定库依赖关系,让proguard只关注我的代码,然后我想把它传递给shadowjar插件进行fatjar打包。
我的设置如下:
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打包在一起。
你看到我的方法中的问题在哪里了吗?
发布于 2017-12-21 14:12:42
试试这个,对我很管用:
task shadowJar2( type: com.github.jengelman.gradle.plugins.shadow.tasks.ShadowJar ) {
baseName = jar.baseName
from obfuscate
configurations = [project.configurations.embed]
classifier = 'shadow'
//version =
}问题是,默认的shadowJar任务除了模糊的+库jars之外,还会获取您的“主”源集。通过定义您自己的自定义'shadowJar2‘任务,您可以显式地定义您的源,在这种情况下,它只是jars ('obfuscate’+ 'embed')而不是一个源集。
https://stackoverflow.com/questions/43643609
复制相似问题