如何在 Gradle 中使用带有混淆 jar 的 Launch4J
Posted
技术标签:
【中文标题】如何在 Gradle 中使用带有混淆 jar 的 Launch4J【英文标题】:How to use Launch4J with obfuscated jar in Gradle 【发布时间】:2019-04-29 06:24:09 【问题描述】:我正在尝试使用我的混淆 jar 使用 Launch4J 创建一个可执行文件,但我遇到了问题。每次我通过 Gradle 运行 createEXE
任务时,shadowJar 任务也会运行,导致我的混淆 jar 被覆盖。
如何将我的混淆 jar 与 Launch4J 的 createExe
任务一起使用?否则在createExe
执行期间如何阻止shadowJar
运行?
这是我的 Launch4J 任务:
launch4j
jar = "$projectDir/build/libs/plugin.jar"
outfile = 'Plugin.exe'
icon = "$projectDir/etc/icon.ico"
mainClassName = 'plugin.Driver'
bundledJrePath = './jre'
jreMinVersion = '1.8.0_161'
jdkPreference = 'preferJdk'
【问题讨论】:
所以你正在使用 shadowJar 但还有一个来自其他地方的混淆 jar?是什么产生的? @ToYonos 我运行 shadowJar 来创建一个包含所有依赖项的 jar。然后我通过它的gui使用proguard混淆了那个jar。我稍后会将其集成到 Gradle 中。当我运行 createExe 任务时,它会重新运行 shadowJar,因此会覆盖并创建非混淆 jar 的可执行文件 试试gradle -x shadowJar createExe
@ToYonos 它看起来有效:) 你想回复作为答案,以便我可以标记它吗?还有 -x 究竟做了什么?
【参考方案1】:
您应该使用-x
选项忽略shadowJar
任务。它告诉 Gradle 跳过指定的任务。
gradle -x shadowJar createExe
你也可以这样永久地做:
gradle.taskGraph.whenReady taskGraph ->
if (taskGraph.hasTask(createExe))
shadowJar.enabled = false
【讨论】:
以上是关于如何在 Gradle 中使用带有混淆 jar 的 Launch4J的主要内容,如果未能解决你的问题,请参考以下文章
添加 framework.jar,混淆失败(不混淆framework.jar)