博客
关于我
java gradle 目录_拆分Gradle中的所有输出目录
阅读量:361 次
发布时间:2019-03-05

本文共 2408 字,大约阅读时间需要 8 分钟。

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() ,您会收到此警告 .

Officially recommended way to get rid of this warning is :

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源代码构建脚本中的弃用 .

另一个问题是测试文件 . If you don't like to have different hierarchy layout ( 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的用户可能会注意到IDE开始使用单独的 out 目录来构建它检测到的Gradle 4.x.如果您在IDEA之外运行应用程序,那么这将无法实现 hot app reloading . 要修复添加和重新导入:

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 clean .

转载地址:http://kvjg.baihongyu.com/

你可能感兴趣的文章
C++面向对象
查看>>
专题(七)贪心——AcWing 112. 雷达设备
查看>>
深入理解JVM(一)JVM概述、类的声明周期、JVM整体架构、JMM、volatile
查看>>
2020.9.12 SSL普及组模拟(第4题)(树)(暴力邻接表80)
查看>>
Codeforces 1400E Clear the Multiset(贪心 + 分治)
查看>>
JDBC连接数据库
查看>>
2019CCPC女生专场赛_K - Tetris_打表/模拟_暴力之王
查看>>
P1125 [NOIP2008 提高组] 笨小猴 (Java)
查看>>
HDU1559(二维前缀和模板 Java&C++)
查看>>
ASP.NET javascript实现图片切换
查看>>
IIS express web 无法启动服务器
查看>>
“/”应用程序中的服务器错误。
查看>>
MUI之ajax获取后台接口数据
查看>>
使用sqlserver 查询不连续的数据
查看>>
用div+css+html+js 实现图片放大
查看>>
mui返回到父页页面并进行刷新
查看>>
数据库中优化lock
查看>>
layui 点击选择框为啥会出现震动(已解决)
查看>>
小程序滑块视图容器的使用
查看>>
考研数据结构LeetCode入门题
查看>>