如何在 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的主要内容,如果未能解决你的问题,请参考以下文章

Gradle混淆+打包Jar包基础

如何在gradle文件夹中下载带有pom文件的jar文件?

添加 framework.jar,混淆失败(不混淆framework.jar)

Gradle ShadowJar 输出包含混淆和非混淆类

使用 Gradle 创建带有依赖 Jar 的 Osgi Bundle

在 gradle android build 中使用 progaurd 生成 jar 文件