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