Gradle 8.8升级后launch4j插件报'jar'属性未知错误求助
问题解决:Gradle 8.8下Launch4j 'jar'属性报错
核心原因
Gradle升级到8.8后,你使用的Launch4j插件3.0.6版本配置API发生变化:launch4j扩展不再支持jar属性;同时Spring Boot 3.x插件会默认禁用jar任务,改用bootJar生成可执行Jar,原代码中直接引用jar任务的逻辑也会触发错误。
修复步骤
- 替换Launch4j配置中的
jar属性:改用jarTask关联bootJar任务,避免硬编码Jar路径 - 修复
bootJar的manifest属性赋值逻辑:避免直接引用已被禁用的jar任务 - 可选:升级Launch4j插件到适配Gradle 8.x的稳定版本(如3.1.0),提升兼容性
修改后的完整app.gradle代码
buildscript { repositories { maven { url "https://plugins.gradle.org/m2/" } } dependencies { classpath "org.springframework.boot:spring-boot-gradle-plugin:3.1.5" // 可选:升级到兼容Gradle8.x的版本 // classpath "edu.sc.seis.launch4j:launch4j:3.1.0" classpath "edu.sc.seis.launch4j:launch4j:3.0.6" classpath "com.gorylenko.gradle-git-properties:gradle-git-properties:2.4.2" } } apply from: "${buildscript.sourceFile.parent}/java.gradle" apply plugin: org.springframework.boot.gradle.plugin.SpringBootPlugin apply plugin: edu.sc.seis.launch4j.Launch4jPlugin apply plugin: com.gorylenko.GitPropertiesPlugin // 修复manifest属性赋值:继承java.gradle中的配置(若存在) bootJar { archiveFileName.set("${project.name}-exec.jar") // 安全继承jar任务的manifest配置(仅当jar任务存在时执行) if (project.tasks.findByName('jar') != null) { manifest.attributes.putAll(jar.manifest.attributes) } } launch4j { mainClassName = "org.springframework.boot.loader.JarLauncher" // 替换原jar属性,直接关联bootJar任务 jarTask = bootJar outputDir = "libs" headerType = "console" // icon = "${projectDir}/src/main/resources/favicon.ico" copyright = "test" companyName = "test" internalName = "test" bundledJrePath = "./jre" } build.finalizedBy createExe
额外说明
- Launch4j 3.x版本移除了
jar属性,改用jarTask关联Jar生成任务,Gradle会自动处理任务依赖关系,避免路径硬编码导致的构建不一致问题 - Spring Boot 3.x插件默认禁用
jar任务,所有可执行Jar生成逻辑由bootJar任务接管,直接引用jar任务会触发"未知属性"类错误
内容的提问来源于stack exchange,提问作者Pgs
相关产品推荐
相关产品推荐

