Gradle IDEA 乱码

环境

Java 环境

java version "21.0.2" 2024-01-16 LTS
Java(TM) SE Runtime Environment (build 21.0.2+13-LTS-58)
Java HotSpot(TM) 64-Bit Server VM (build 21.0.2+13-LTS-58, mixed mode, sharing)

Gradle 环境

------------------------------------------------------------
Gradle 8.5
------------------------------------------------------------

Build time:   2023-11-29 14:08:57 UTC
Revision:     28aca86a7180baa17117e0e5ba01d8ea9feca598

Kotlin:       1.9.20
Groovy:       3.0.17
Ant:          Apache Ant(TM) version 1.10.13 compiled on January 4 2023
JVM:          21.0.2 (Oracle Corporation 21.0.2+13-LTS-58)
OS:           Windows 11 10.0 amd64

IDEA

IntelliJ IDEA 2023.3.3 (Ultimate Edition)
Build #IU-233.14015.106, built on January 25, 2024
Subscription is active until October 14, 2024.
Runtime version: 17.0.9+7-b1087.11 amd64
VM: OpenJDK 64-Bit Server VM by JetBrains s.r.o.
Windows 11.0
GC: G1 Young Generation, G1 Old Generation
Memory: 2048M
Cores: 32
Registry:
  debugger.new.tool.window.layout=true
  ide.experimental.ui=true
Non-Bundled Plugins:
  com.jetbrains.packagesearch.intellij-plugin (233.11799.196)
  com.intellij.ml.llm (233.14015.137)
Kotlin: 233.14015.106-IJ

代码

Main.java

package com.stu;

public class Main {

    public static void main(String[] args) {
        Main main = new Main();
        main.test00();
    }

    public void test00() {
        System.out.println("中文测试");
        System.out.println("sun.stdout.encoding = " + System.getProperty("sun.stdout.encoding"));
        System.out.println("sun.stderr.encoding = " + System.getProperty("sun.stderr.encoding"));
        System.out.println("      file.encoding = " + System.getProperty("file.encoding"));
        System.out.println("    native.encoding = " + System.getProperty("native.encoding"));
    }
}

build.gradle.kts

/*
 * This file was generated by the Gradle 'init' task.
 *
 * This is a general purpose Gradle build.
 * To learn more about Gradle by exploring our Samples at https://docs.gradle.org/8.5/samples
 */

plugins {
    id("java")
}

tasks.register("runCode", JavaExec::class) {
    //defaultCharacterEncoding = "GBK"

    // println("测试Code" + defaultCharacterEncoding)

    mainClass = "com.stu.Main"
    classpath = sourceSets["main"].runtimeClasspath

    group = "Exec"
    description = "运行指定代码"
}

// tasks.register("runStu") {
//     for (sourceSetContainer in sourceSets) {
//         println(sourceSetContainer)
//     }

//     println(sourceSets)
// }

// tasks.withType<JavaCompile>().configureEach {

// }

/*
tasks.withType(JavaExec::class.java) {
    val args:List<String> = ArrayList()
    args.addLast("-Dsun.stdout.encoding=GBK")
    args.addLast("-Dsun.stderr.encoding=GBK")
    args.addLast("-Dfile.encoding=GBK")
    this.jvmArgs = args
    println(this.jvmArgs)
}
*/

测试结果

配置 JAVA_TOOL_OPTIONS

无效

# 配置 JAVA_TOOL_OPTIONS  -Dsun.stdout.encoding=GBK -Dsun.stderr.encoding=GBK -Dfile.encoding=GBK

> Task :runCode
涓枃娴嬭瘯
sun.stdout.encoding = UTF-8
sun.stderr.encoding = UTF-8
      file.encoding = GBK
    native.encoding = GBK

配置 build.gradle.kts

有效

tasks.withType(JavaExec::class.java) {
    val args:List<String> = ArrayList()
    args.addLast("-Dsun.stdout.encoding=GBK")
    args.addLast("-Dsun.stderr.encoding=GBK")
    args.addLast("-Dfile.encoding=GBK")
    this.jvmArgs = args
    println(this.jvmArgs)
}
> Task :runCode
中文测试
sun.stdout.encoding = GBK
sun.stderr.encoding = GBK
      file.encoding = GBK
    native.encoding = GBK

配置 idea64.exe.vmoptions

无效

-Dsun.stdout.encoding=GBK
-Dsun.stderr.encoding=GBK
-Dfile.encoding=GBK
> Task :runCode
涓枃娴嬭瘯
sun.stdout.encoding = UTF-8
sun.stderr.encoding = UTF-8
      file.encoding = GBK
    native.encoding = GBK

无配置

无效


> Task :runCode
涓枃娴嬭瘯
sun.stdout.encoding = UTF-8
sun.stderr.encoding = UTF-8
      file.encoding = GBK
    native.encoding = GBK

最新解决方式

  • Gralde 命令行运行

    1. 配置系统环境变量

      GRADLE_OPTS
      -Dfile.encoding=COMPAT
      
    2. 配置Gradle 全局编码
      GRADLE_USER_HOME 下的 init.gradle

      	gradle.projectsLoaded {
      	    rootProject.allprojects {
      	        tasks.withType(JavaCompile) {
      	            options.encoding = 'UTF-8' // 设置源文件编码
      	        }
      	
      			tasks.withType(Javadoc) {
      	            options.encoding = 'UTF-8'
      	        }
      	    }
      	}
      
  • IDEA 运行配置

    1. 配置idea64.exe.vmoptions

      -Dfile.encoding=COMPAT
      

      这个配置可以解决IDEA中的乱码

    2. 配置Gradle 全局编码
      GRADLE_USER_HOME 下的 init.gradle

      	gradle.projectsLoaded {
      	    rootProject.allprojects {
      	        tasks.withType(JavaCompile) {
      	            options.encoding = 'UTF-8' // 设置源文件编码
      	        }
      	
      			tasks.withType(Javadoc) {
      	            options.encoding = 'UTF-8'
      	        }
      	    }
      	}
      

因为新版本JDK,设置了默认UTF-8编码 JEP 400: UTF-8 by Default,编码格式设置为COMPAT,可以默认使用现在系统的编码格式

总结

查看最新解决方式

问题链接

Gradle 社区问题: Gradle Garbled code

Stack overflow: Why do Java programs created using Gradle generate garbled code when running

  • 7
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Gradle是一种开源的构建工具,它专注于灵活性和可扩展性,并且被广泛用于构建和管理Java项目。而"idea"在这里指的是 JetBrains 公司开发的集成开发环境 (IDE),即IntelliJ IDEA。 在Gradle中使用"gradle idea"命令,可以生成IntelliJ IDEA项目文件。这意味着当我们使用Gradle来构建和管理我们的Java项目时,可以轻松地将项目导入到IntelliJ IDEA中进行开发和调试。 "gradle idea"命令执行后,Gradle会根据项目的配置和依赖关系自动生成 IntelliJ IDEA项目所需的文件和目录,包括.iml文件(模块文件)、.idea目录(IDEA配置文件)、.ipr文件(项目文件)等。 通过生成IntelliJ IDEA项目文件,我们可以在IntelliJ IDEA中利用其强大的开发工具和功能来进行Java项目的开发和调试。它提供了丰富的智能化代码编辑器、自动补全、语法检查、代码格式化、代码导航等功能,可以大大提高我们的开发效率。 此外,IntelliJ IDEA还提供了强大的调试工具,可以方便地进行代码调试和错误定位。除了基本的断点调试功能外,它还支持查看变量值、堆栈跟踪、表达式求值等高级调试功能,帮助我们更好地排查和修复问题。 总之,通过"gradle idea"命令生成IntelliJ IDEA项目文件,我们可以将Gradle管理的Java项目导入到IntelliJ IDEA中,利用IntelliJ IDEA强大的编辑和调试功能来进行快速、高效的开发。 ### 回答2: Gradle是一种现代化、灵活和强大的构建工具,而Idea是一种功能强大的集成开发环境(IDE)。gradle idea是指使用Gradle来构建Idea项目。 首先,Gradle具有强大的构建功能,它可以管理项目的依赖、编译代码、运行测试、生成文档等。通过使用Gradle构建Idea项目,我们可以轻松地自动化这些任务。它提供了一种简单易用的声明式语法,让我们能够轻松地定义项目的结构和行为。 其次,使用Gradle构建Idea项目还可以提供更加灵活的构建流程。Gradle支持多种构建方式,例如增量构建、并行构建和增量测试等,这些功能可以提高构建速度和效率。此外,Gradle还支持构建缓存,可以避免不必要的重新构建,进一步加快构建过程。 另外,Gradle还支持构建脚本的复用和可配置性。我们可以将常用的构建逻辑封装为自定义的构建脚本,并在不同的项目中重复使用。同时,Gradle还支持使用Groovy或Kotlin等语言来编写构建脚本,这使得构建逻辑更加灵活和可读性更高。 总而言之,使用Gradle构建Idea项目可以提供更加灵活和高效的构建过程。它能够帮助我们简化项目的管理和维护,并且提供了丰富的功能和扩展性。无论是小型项目还是大型企业级项目,Gradle都是一个值得考虑的构建工具。 ### 回答3: Gradle是一款强大的构建工具,而Idea是一款优秀的集成开发环境。他们之间的关系是,Gradle可以与Idea进行集成,提供更方便的项目构建和管理。 通过使用Gradle构建工具,我们可以定义项目的依赖关系、任务以及构建过程。在Gradle中,我们可以使用Groovy或Kotlin的DSL语法来编写构建脚本,这使得构建过程更加灵活和可配置。 当我们使用Gradle构建项目时,我们可以使用Gradle插件来实现与Idea的集成。通过Idea插件,我们可以将Gradle构建的项目导入到Idea中,从而在Idea中进行开发和调试。 集成GradleIdea可以带来多个优势。首先,Gradle可以自动管理项目的依赖关系,通过定义依赖关系,我们可以方便地引入第三方库和框架,并保证项目的版本兼容性。其次,Gradle可以定义不同的构建任务,如编译、打包、测试等,我们可以通过Gradle执行这些任务,提高开发效率。 另外,通过GradleIdea的集成,我们可以方便地进行项目的调试和测试。在Idea中,我们可以使用调试器对项目进行调试,快速定位和解决问题。同时,Idea也提供了丰富的测试工具,我们可以方便地编写和运行单元测试、集成测试等。 综上所述,GradleIdea的集成为开发者提供了更好的项目构建和管理工具,提高了开发效率和代码质量。通过他们的协同工作,我们可以更方便地进行项目开发和维护。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值