Gradle ShadowJar输出包含模糊和非模糊类
在我简单的gradle构建中,我希望同时使用ShadowJar和ProGuard。在这里,shadowJar任务的输出是proguard任务的输入,它工作得很好,然而,在我的例子中,我更喜欢首先创建一个小的模糊jar,在这里我很好地指定了库依赖项,并让proguard只关注我的代码,然后我想将其传递给shadowjar插件进行fatjar打包 我的设置如下所示:Gradle ShadowJar输出包含模糊和非模糊类,gradle,proguard,shadowjar,Gradle,Proguard,Shadowjar,在我简单的gradle构建中,我希望同时使用ShadowJar和ProGuard。在这里,shadowJar任务的输出是proguard任务的输入,它工作得很好,然而,在我的例子中,我更喜欢首先创建一个小的模糊jar,在这里我很好地指定了库依赖项,并让proguard只关注我的代码,然后我想将其传递给shadowjar插件进行fatjar打包 我的设置如下所示: task obfuscate(type: proguard.gradle.ProGuardTask) { injars jar
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输出包含所有未模糊(fine)、我的模糊代码(fine)和我的未模糊代码的库。所以,不知怎的,原来的课程偷偷地进来了,我不知道这是怎么发生的。我无法指定shadowJar将依赖项和proguard输出jar打包在一起
你知道我的方法有什么问题吗?试试这个,对我有用:
task shadowJar2( type: com.github.jengelman.gradle.plugins.shadow.tasks.ShadowJar ) {
baseName = jar.baseName
from obfuscate
configurations = [project.configurations.embed]
classifier = 'shadow'
//version =
}
问题是,默认的shadowJar任务除了接受模糊处理的+库jar外,还接受“main”源集。通过定义您自己的自定义“shadowJar2”任务,您可以显式地定义您的源,在本例中,它只是JAR(“模糊”+“嵌入”),而不是源集。试试这个,对我有用:
task shadowJar2( type: com.github.jengelman.gradle.plugins.shadow.tasks.ShadowJar ) {
baseName = jar.baseName
from obfuscate
configurations = [project.configurations.embed]
classifier = 'shadow'
//version =
}
问题是,默认的shadowJar任务除了接受模糊处理的+库jar外,还接受“main”源集。通过定义您自己的自定义“shadowJar2”任务,您可以显式地定义您的源代码,在本例中,它只是jar(“模糊化”+“嵌入”),而不是源代码集。我正在尝试实现类似的功能(只模糊了我们自己代码的[部分]的胖jar)在尝试您的建议时,我收到以下错误消息:
无法获取配置容器的未知属性“嵌入”
。然后,我尝试了compile
而不是embed
(这应该是Java项目的有效配置),并得到了任务:obfuscate的执行失败。必须在输入jar之后指定输出jar,否则它将为空
我正在尝试实现类似的功能(胖jar只模糊了我们自己的代码的[部分]),并且在尝试您的建议时收到此错误消息:无法获取配置容器的未知属性“嵌入”
。然后,我尝试了compile
而不是embed
(这应该是Java项目的有效配置),并得到了任务:obfuscate的执行失败。必须在输入jar之后指定输出jar,否则它将为空