Gradle 4.0
sourceSet为每种JVM语言引入了多个s,以便启用远程构建缓存。使用该
java插件,您
build/classes/main应该成为
build/classes/java/main和
build/classes/test应该成为
build/classes/java/test,等等。
您看到的警告在DefaultSourceSets.java中定义
因此,如果项目中有任何插件或您的
build.gradle调用
DefaultSourceSetOutput.getClassesDir()(或访问
classesDir),您将收到此警告。
解决方案1
用
sourceSets.main.output.classesDir = new File(buildDir, "classes/main")
对应于:
@Overridepublic boolean isLegacyLayout() { return classesDir!=null;}@Overridepublic void setClassesDir(File classesDir) { setClassesDir((Object)classesDir);}@Overridepublic void setClassesDir(Object classesDir) { this.classesDir = classesDir; this.classesDirs.setFrom(classesDir);}请注意,SourceSetOutput.java标记
getClassesDir()为已弃用。
因此,在项目中的所有插件都获得对Gradle 4.0的支持之前,您应该坚持解决方法,并忽略弃用警告。
另一个问题是测试文件。 如果您不想使用新的布局
(
build/classes/main和
build/classes/java/test),也应该调整测试路径:
sourceSets.main.output.classesDir = new File(buildDir, "classes/main")sourceSets.test.output.classesDir = new File(buildDir, "classes/test")
UPDATE IDEA的用户可能会注意到,
out如果检测到Gradle 4.x
,IDE将开始使用单独的目录进行构建。如果您在IDEA之外运行应用程序,则无法 重新加载热应用 程序。要修复该添加和重新导入:
subprojects { apply plugin: 'idea' // Due to Gradle 4.x changes (separate output directories per JVM language) // Idea developers refuse to reuse Gradle classpath and use own 'out/' directory. // Revert to old behavior to allow Spring Devtool to work with using fast Idea compiler. // https://youtrack.jetbrains.com/issue/IDEA-175172 // Alternatively use native Gradle builds or bootRun.addResources = true // To use this feature push Ctrl+Shift+F9 to recompile! // Be aware that Idea put resources into classes/ directory!! idea.module.inheritOutputDirs = false idea.module.outputDir = sourceSets.main.output.classesDir idea.module.testOutputDir = sourceSets.test.output.classesDir}请注意,IDEA将资源与
.class文件放在同一目录中,因此您的Gradle类路径可能会损坏。只需
gradleclean对使用IDEA内置构建命令(Ctrl + Shift + F10等)的模块进行操作。



