Gradle 4.0昨天发布了,我为此更新了我的项目。
现在,我收到以下警告:
Gradle现在为每种JVM语言使用单独的输出目录,但是此构建为源集中的所有类假定一个目录。此行为已被弃用,并计划在Gradle 5.0中删除。
我想为每种语言使用单独的输出目录。我需要进行哪些更改才能实现这一目标?
我尝试过的事情:
gradle clean
其次是 gradle build
gradle build
。gradle
相关的GitHub 问题
Gradle插件:
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
),您将收到此警告。
用
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);
}
请注意,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类路径可能会损坏。只需gradle clean
对使用IDEA内置构建命令(Ctrl + Shift + F10等)的模块进行操作。
我很久以前就问过这个问题.... 有没有办法在Gradle中列出任务依赖关系?
我想有一个gradle项目,使用自定义任务创建一个jar(不使用任何gradle java插件)。什么是正确的方法来构建build.gradle,以便我可以在我的Android应用程序的gradle项目中依赖它? 更多详情: 目前,我的jar文件是在我从gradle调用的cmake项目中创建的。我想要一个合适的体形。调用我的cmake命令的gradle文件然后使用生成的jar作为工件。然后,我希望
我有以下多模块项目结构。 当我为/builder子项目运行任务时,我希望所有子项目都会执行任务(对于
rank ▲ ✰ vote url 39 502 134 633 url 在Python中列出目录中的所有文件 怎么样用Python列出一个目录的所有文件并且存进一个列表? os.listdir()可以获得一个目录中所有文件或者子目录. 如果你只想要文件的话,你也可以用os.path把其他的过滤掉: from os import listdir from os.path import isfile
我一直在研究将jython嵌入到我的java程序中,以允许用户用Python编写脚本。但是,我希望将他们的python脚本的输出打印到程序中的java文本框中。但是我找不到嵌入jython引擎输出的方法: