You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Gradle Launch4j:创建Launch4jLibraryTask触发Project.afterEvaluate错误求助

解决Launch4j插件创建第二个可执行文件的报错问题

错误原因

手动注册Launch4jLibraryTask时,任务构造函数内部会调用Project.afterEvaluate(),如果任务注册时机晚于项目评估阶段,就会触发Cannot run Project.afterEvaluate(Closure) when the project is already evaluated错误。

解决方案

方法1:使用插件扩展的tasks容器创建任务(推荐)

这是插件官方支持的多任务创建方式,插件会自动处理任务创建的时机,避免afterEvaluate冲突:

plugins {
    id("edu.sc.seis.launch4j") version "2.5.4"
    application // 确保引入application插件(按需添加)
}

// 配置默认的Launch4j可执行文件任务
launch4j {
    mainClassName = "com.example.Main"
    outputDir = file("build/exe/main")
    // 其他配置项,如icon、jreMinVersion等
}

// 创建第二个可执行文件任务
launch4j.tasks.create("createSecondExe") {
    mainClassName = "com.example.SecondMain"
    outputDir = file("build/exe/second")
    // 自定义第二个任务的配置
}

方法2:提前在beforeEvaluate中注册任务

如果必须手动注册Launch4jLibraryTask,将任务注册逻辑放在project.beforeEvaluate()块中,确保任务在项目评估开始前被创建:

plugins {
    id("edu.sc.seis.launch4j") version "2.5.4"
    application
}

project.beforeEvaluate {
    tasks.register<Launch4jLibraryTask>("createSecondExe") {
        mainClassName = "com.example.SecondMain"
        outputDir = file("build/exe/second")
        // 任务配置
    }
}

// 配置默认任务
launch4j {
    mainClassName = "com.example.Main"
    outputDir = file("build/exe/main")
}

注意事项

  • 优先使用方法1,因为插件的tasks容器会维护任务间的依赖关系,避免手动注册可能带来的逻辑遗漏。
  • 确保mainClassName对应的类在项目编译产物中存在,否则会导致后续打包失败。

内容的提问来源于stack exchange,提问作者G. Tabs

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 22:12:40