在 Gradle 中拆分所有输出目录

2024-01-20

Gradle 4.0 昨天发布了,我为它更新了我的项目。

现在我收到以下警告:

Gradle 现在为每种 JVM 语言使用单独的输出目录,但是 此构建假设源中的所有类都有一个目录 放。此行为已被弃用并计划删除 在 Gradle 5.0 中

我想为每种语言使用单独的输出目录。我需要改变什么才能实现这一点?


我尝试过的事情:

  • gradle clean其次是gradle build
  • 删除构建目录然后运行gradle build.
  • 删除 gradle 和 build 目录然后运行gradle

相关GitHubissue https://github.com/junit-team/junit5/issues/865


摇篮插件:

  • java
  • eclipse
  • idea
  • org.springframework.boot

Gradle 4.0引入了多个sourceSets 每个 JVM 语言,以便启用远程构建缓存。随着java插件你的build/classes/main应该成为build/classes/java/main and build/classes/test应该成为build/classes/java/test, etc.

您看到的警告定义在默认源集.java https://github.com/gradle/gradle/blob/bb0ed850aa4061931a62133091d66c56551cf5e0/subprojects/plugins/src/main/java/org/gradle/api/internal/tasks/DefaultSourceSetOutput.java#L79

因此,如果您的项目或您的项目中有任何插件build.gradle calls DefaultSourceSetOutput.getClassesDir()(或访问classesDir)您会收到此警告。

解决方案1

Use

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 https://docs.gradle.org/current/javadoc/org/gradle/api/tasks/SourceSetOutput.html#getClassesDir() marks getClassesDir()已弃用。

因此,在项目中的所有插件都获得 Gradle 4.0 支持之前,您应该坚持使用解决方法并忽略弃用警告。

另一个问题是测试文件。如果您不想使用新布局 (build/classes/main and build/classes/java/test)你也应该调整测试路径:

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

UPDATEIDEA 的用户可能会注意到 IDE 开始使用单独的out如果检测到 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 类路径可能会损坏。做就是了gradle clean对于使用 IDEA 内置构建命令(Ctrl+Shift+F10 等)的模块。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 Gradle 中拆分所有输出目录 的相关文章

随机推荐

  • 如何解决android中的StringIndexOutOfBoundsException

    这是我的 logcat 报告 java lang StringIndexOutOfBoundsException length 0 regionStart 0 regionLength 2 at java lang String start
  • 无法使用 Visual Studio 2022 将图像添加到 Xamarin.iOS 项目中的 xcassets

    我最近更新到 Visual Studio for Mac 2022 从那时起我一直遇到以下问题 我无法将新图像添加到 Media xcassets 文件夹 在 VS for Mac 2019 上 我能够在 Visual Studio 中实现
  • Firebase AB 测试有 0 个用户

    我们已经使用 Firebase 远程配置开始了 AB 测试 已经超过 24 小时了 它显示 用户总数 0 而本应为每个变体分配数万个 DAU 数据输入需要多长时间 有什么方法可以判断它是否正在运行吗 如果它仍然为零 潜在的根本原因是什么 为
  • 如何订阅 localStorage 但不订阅 sessionStorage 事件

    据我所理解 window addEventListener storage function event false 是 localStorage 和 sessionStorage 事件的订阅 我可以只订阅 localStorage 事件吗
  • SSIS Excel 中的百分比列 -> SQL Server

    我正在尝试创建一个 SSIS 包 将 Excel 数据导入到 SQL Server 2000 数据库 Excel 工作表中的一列采用百分比格式 我希望以字符串格式导入该列 以便它显示 45 22 而不是 0 4522 有没有办法在 SSIS
  • 提高 for 循环在抽取缓冲区时的性能

    我正在使用信号处理库从硬件设备收集 16384 个双精度值 我收到的 16384 个值是低通滤波器的输出 我想将样本减少 10 倍 换句话说 我想在每 10 分中保留 1 分 所以一般来说它的工作原理如下 当低通滤波器完成时 我从我的库中得
  • 在 R 中使用 MICE 时内存不足

    我正在尝试使用 MICE 包在 R 中创建多个插补 但内存不足 这是我收到的错误消息 Error cannot allocate vector of size 219 Kb In addition Warning messages 1 In
  • Javascript 正则表达式 替换 HTML 标签

    使用正则表达式有很多困难 这就是我想做的 text div text div div text div div text div 把它变成 text br text br text br text 我尝试过做 newhtml newhtml
  • 包装库各部分的代码构造是什么?它有什么用?

    我模仿了一个库并能够编写以下代码 这段代码创建了 c 反对 a 功能被分配 所以 打电话 a 我必须写c a 另外 我还可以为此添加更多功能 c 目的 我想了解这段代码中发生了什么 它看起来不像普通的面向对象编程 这种类型的 JavaScr
  • Android 2.3 中的通知生成器

    Android 中相当新 我有一个通知生成器 如果应用程序目标版本 gt 4 0 它可以正常工作 然而 当我切换到 2 3 时 我在这一行收到一条错误 提示 Notificaiton Builder 无法解析为类型 Notification
  • 在 PowerShell 中安装 Chocolatey 时出现错误消息

    我正在尝试安装巧克力味 http chocolatey org 与 PowerShell 一起使用 推荐的安装方法是复制并粘贴以下行 powershell NoProfile ExecutionPolicy unrestricted Com
  • 如何防止在输入字段中按回车键时发生重定向?

    我有一个带有电子邮件输入的表格
  • 虚假的“无法加载控件,未找到许可证”错误?

    当我尝试在设计器中加载表单时 它显示 运行时错误 0 并生成一个日志文件 其中包含 Line 15 Cannot load control xxxx license not found 但有问题的控制没有任何许可限制 它没有安装程序 只需要
  • CXF Web 服务客户端错误

    我正在尝试使用 apache CXF 从 java 客户端调用 Web 服务 以下是我的客户端代码片段 Client client new ClientImpl new URL http localhost 8080 socialkast
  • Xamarin Forms 更改选项卡栏大小

    我在 Forms Droid 上的选项卡栏文本大小方面遇到问题 It looks like this 有谁知道如何缩小字体大小来解决这个问题 Thanks 您可以使用自定义渲染器 https developer xamarin com gu
  • Windows Phone 加载页面后立即导航

    我有 2 个页面 MainPage xaml second xaml MainPage xaml 是登录页面 在此页面中 我发送登录名和密码 并接收结果 我将它们 结果 保存在隔离存储中并导航到第二个 xaml 页面 当我下次启动此应用程序
  • JAXB - 从 XSD 生成类 - 将枚举转换为字符串

    使用 JAXB 我们直接生成 Java bean 在 XSD 中 我们有一个枚举类型
  • 写入现有二进制文件的中间 C++

    我正在尝试打开一个二进制文件进行写入而不擦除内容 但我不想写eof 我想写入文件中的特定位置 这是一个小例子 ofstream out test txt ios binary ios app for int i 0 i lt 100 i o
  • ASP.net UserControl 和 AppDomain TypeResolve

    我使用 VirtualPathProvider 来包含编译时不可用的用户控件 除了对实际包含控件的 dll 的引用之外 一切都工作正常 当调用具有该控件的页面时 它无法找到控件类型 除非我将 dll 放在 bin 文件夹中 错误 解析器错误
  • 在 Gradle 中拆分所有输出目录

    Gradle 4 0 昨天发布了 我为它更新了我的项目 现在我收到以下警告 Gradle 现在为每种 JVM 语言使用单独的输出目录 但是 此构建假设源中的所有类都有一个目录 放 此行为已被弃用并计划删除 在 Gradle 5 0 中 我想