Gradle3.0升5.6.4后JavaCompile任务execute报错及编译文件缺失求助
问题解决:Gradle升级后编译任务不生成.class文件
问题原因
你创建的CustomTask2没有指定任务类型为JavaCompile,只是一个普通的默认任务,因此你在其中配置的source、destinationDir等属性完全无效,Gradle不会执行任何编译操作,自然不会生成.class文件。
另外,原代码中的execute()方法在Gradle 5+中已被废弃,它会跳过Gradle的任务依赖管理和增量构建机制,正确做法是通过任务依赖或直接调用任务来触发执行。
正确解决方案
方案1:定义编译任务并关联到构建生命周期
如果你希望自定义编译任务在默认任务(比如compileJava)执行后自动运行,可按以下配置:
// 定义JavaCompile类型的自定义编译任务 project.tasks.create(type: JavaCompile, name: 'customTask1') { // 替换为实际源码目录,用file()方法确保路径解析正确 source file('<source dir>') // 替换为实际输出目录 destinationDir file('<destination dir>') classpath = project.sourceSets.main.compileClasspath } // 让compileJava执行完成后自动运行customTask1 project.tasks.compileJava.finalizedBy(project.tasks.customTask1)
执行./gradlew compileJava时,customTask1会自动执行,生成对应的.class文件。
方案2:创建触发任务手动执行
如果需要手动触发编译任务,可创建一个依赖它的任务,或直接在命令行调用编译任务:
// 先定义JavaCompile类型的编译任务 project.tasks.create(type: JavaCompile, name: 'customTask1') { source file('<source dir>') destinationDir file('<destination dir>') classpath = project.sourceSets.main.compileClasspath } // 创建CustomTask2,依赖customTask1,执行CustomTask2时会自动运行编译任务 project.tasks.create(name: 'CustomTask2') { dependsOn project.tasks.customTask1 }
执行./gradlew CustomTask2或直接执行./gradlew customTask1,即可完成编译并生成.class文件。
关键注意点
- 编译类任务必须指定
type: JavaCompile,否则Gradle无法识别编译配置 - 路径配置尽量用
file()方法包装,避免相对路径解析错误 - 禁止使用
execute()触发任务,依赖Gradle的任务依赖机制才能保证增量构建和正确执行顺序
内容的提问来源于stack exchange,提问作者sdasa
相关产品推荐
相关产品推荐

