Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/extjs/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Gradle:分发可执行的、模糊的Jar文件_Gradle_Jar_Proguard - Fatal编程技术网

Gradle:分发可执行的、模糊的Jar文件

Gradle:分发可执行的、模糊的Jar文件,gradle,jar,proguard,Gradle,Jar,Proguard,我试图使用gradle和proguard来混淆代码,然后生成一个zip文件来分发。我想使用,但它总是包含jar任务生成的jar。有没有办法强制分发插件忽略原始(未模糊化)jar,而只包含模糊化的jar?我可以很容易地将模糊化jar添加到原始jar之外,但是我想分发模糊化jar,而不是原始jar的,以便生成的执行脚本针对模糊化版本运行 这是我的build.gradle文件摘要: buildscript { repositories { mavenCentral()

我试图使用gradle和proguard来混淆代码,然后生成一个zip文件来分发。我想使用,但它总是包含jar任务生成的jar。有没有办法强制分发插件忽略原始(未模糊化)jar,而只包含模糊化的jar?我可以很容易地将模糊化jar添加到原始jar之外,但是我想分发模糊化jar,而不是原始jar的,以便生成的执行脚本针对模糊化版本运行

这是我的build.gradle文件摘要:

buildscript {
    repositories {
        mavenCentral()
    }
    dependencies {
        classpath 'net.sf.proguard:proguard-gradle:5.3.3'
    }
}

apply plugin: 'java'
apply plugin: 'application'

task obfuscate(type: proguard.gradle.ProGuardTask) {
    configuration 'proguard.txt'

    injars "build/libs/${rootProject.name}.jar"
    outjars "build/libs/${rootProject.name}-release.jar"
}

jar.finalizedBy(project.tasks.obfuscate)

distributions {
    main {
        contents {
            from(obfuscate) {
                into "lib"
            }
            from(jar) {
                exclude "*.jar"
            }
        }
    }
}
我在distributions块中尝试了许多方法来排除原始jar,但似乎没有任何效果


任何想法都将不胜感激。

这不是最好的解决方案,但我能够通过在混淆步骤结束时重命名JAR来解决这个问题。现在,我将原始jar命名为
-original.jar
,并将原始jar的名称命名为模糊的jar。我仍然希望有更好的方法来做,但这似乎奏效了

以下是更新的、删节的
build.gradle
文件:

import java.nio.file.Paths

buildscript {
    repositories {
        mavenCentral()
    }
    dependencies {
        classpath 'net.sf.proguard:proguard-gradle:5.3.3'
    }
}

apply plugin: 'java'
apply plugin: 'application'

def jarNameWithoutExtension = jar.archiveName.with { it.take(it.lastIndexOf(".")) }
def obfuscatedJarName = "${jarNameWithoutExtension}-release.jar"
def jarFileLocation = jar.archivePath.parent
def obfuscatedFilePath = Paths.get(jarFileLocation, obfuscatedJarName)

task obfuscate(type: proguard.gradle.ProGuardTask) {
    configuration 'proguard.txt'

    injars jar.archivePath
    outjars obfuscatedFilePath.toString()

    // Rename the original and obfuscated jars.  We want the obfuscated jar to
    // have the original jar's name so it will get included in the distributable
    // package (generated by installDist / distZip / distTar / assembleDist).
    doLast {
        jar.archivePath.renameTo(Paths.get(jarFileLocation, "$jarNameWithoutExtension-original.jar").toFile())

        obfuscatedFilePath.toFile().renameTo(jar.archivePath)
    }
}

jar.finalizedBy(project.tasks.obfuscate)