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

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

在我简单的gradle构建中,我希望同时使用ShadowJar和ProGuard。在这里,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输出包含所有未模糊(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,否则它将为空