java gradle 目录_java – 拆分Gradle中的所有输出目录

博客介绍了在升级到Gradle 4.0后遇到的关于源代码目录变更的警告,以及如何调整项目设置以解决这些问题。包括修改sourceSet的输出目录,以匹配新的语言分离结构,并且针对IDEA的配置进行相应调整,以避免IDEA内置构建命令导致的问题。同时,警告用户IDEA会将资源文件放入与.class文件相同的目录,可能会影响Gradle类路径。
摘要由CSDN通过智能技术生成

Gradle 4.0为每个JVM语言引入了多个sourceSet,以便启用远程构建缓存。使用java插件,你的build / classes / main应该变成build / classes / java / main,build / classes / test应该变成build / classes / java / test等。

该警告的定义如下:

@Override

public File getClassesDir() {

if (isLegacyLayout()) {

return fileResolver.resolve(classesDir);

}

SingleMessageLogger.nagUserOfDeprecatedBehaviour("Gradle now uses separate output directories for each JVM language, but this build assumes a single directory for all classes from a source set");

Object firstClassesDir = CollectionUtils.findFirst(classesDirs.getFrom(), Specs.SATISFIES_ALL);

if (firstClassesDir!=null) {

return fileResolver.resolve(firstClassesDir);

}

return null;

}

因此,如果项目中的任何插件或build.gradle调用DefaultSourceSetOutput.getClassesDir(),则会收到此警告。

正式推荐的摆脱这种警告的方法是:

sourceSets.main.output.classesDir = new File(buildDir, "classes/main")

对应于:

@Override

public boolean isLegacyLayout() {

return classesDir!=null;

}

@Override

public void setClassesDir(File classesDir) {

setClassesDir((Object)classesDir);

}

@Override

public void setClassesDir(Object classesDir) {

this.classesDir = classesDir;

this.classesDirs.setFrom(classesDir);

}

因此,在项目中所有使用过的插件获得对Gradle 4.0的支持之前,您应该坚持使用变通方法并忽略Gradle源代码构建脚本中的弃用。

另一个问题是测试文件。如果你不喜欢有不同的层次结构布局(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")

更新IDEA的用户可能会注意到IDE开始使用单独的目录来构建它检测到Gradle 4.x.如果您在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类路径就会被破坏。只需对使用IDEA内置构建命令(Ctrl Shift F10等)的模块进行gradle清理。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值