Picked up JAVA_TOOL_OPTIONS: -Dfile.encoding=GBK 新版IDEA编码格式GBK问题 maven命令Picked up JAVA_TOOL_OPTION

📋 问题概述

问题现象

在使用新版IDEA执行 Maven 构建项目时,控制台输出警告信息:

Picked up JAVA_TOOL_OPTIONS: -Dfile.encoding=GBK 

🔍 问题排查过程

第一阶段:初步判断与假设

初始假设:系统环境变量设置了 Java 编码为 GBK

第二阶段:环境变量验证

cmd

# 检查环境变量 echo %JAVA_TOOL_OPTIONS% # 输出:%JAVA_TOOL_OPTIONS%(表示变量未显式设置) 

排查结果:系统环境中并未手动设置 JAVA_TOOL_OPTIONS 变量

第三阶段:深入排查IDEA配置

怀疑方向:IDEA内部设置或配置文件指定了GBK编码

检查项包括:

  1. IDEA VM OptionsHelp → Edit Custom VM Options
  2. Maven Runner配置Settings → Build Tools → Maven → Runner
  3. 项目配置.idea 目录下的配置文件
  4. Maven配置文件settings.xml 和 pom.xml

排查结果:IDEA配置中未发现显式的GBK编码设置

第四阶段:系统级排查

关键发现:通过检查 Windows 区域设置,定位问题根源

检查步骤:

  1. 控制面板 → 时钟和区域 → 区域
  2. 管理标签页 → 更改系统区域设置
  3. 发现未勾选"Beta版:使用Unicode UTF-8"

🎯 问题根本原因分析

核心原因

Windows 中文系统区域设置的默认行为 + IDEA自动检测机制

具体机制

1. 系统层行为
2. IDEA特殊行为

猜测机制:新版IDEA可能具备:

  • 自动系统扫描:启动时扫描系统区域设置
  • 智能编码配置:根据区域自动设置编码
  • 环境变量注入:自动配置JAVA_TOOL_OPTIONS
3. 问题触发流程
IDEA启动 ↓ 扫描系统区域设置(发现中文中国) ↓ 自动配置编码为GBK("智能"行为) ↓ 注入JAVA_TOOL_OPTIONS=-Dfile.encoding=GBK ↓ Maven构建时继承此设置 ↓ 控制台显示警告信息 

💡 解决方案实施

方案选择:修改系统区域设置

实施步骤详解

步骤1:访问区域设置

开始菜单 → 设置 → 时间和语言 → 语言和区域 或 控制面板 → 时钟和区域 → 区域 

步骤2:进入高级设置

1. 点击"相关设置"下的"管理语言设置" 2. 在弹出的窗口中点击"更改系统区域设置" 

步骤3:启用UTF-8支持

1. 勾选"Beta版:使用 Unicode UTF-8 提供全球语言支持" 2. 点击"确定" 3. 根据提示重启计算机 

步骤4:验证修改效果
重启后,在IDEA中执行:

mvn clean compile 

输出变为:

Picked up JAVA_TOOL_OPTIONS: -Dfile.encoding=UTF-8

Read more

C++:模板的幻觉 —— 实例化、重定义与隐藏依赖势中

C++:模板的幻觉 —— 实例化、重定义与隐藏依赖势中

一、表象之下:模板真的“生成代码”吗? 很多人第一次学 C++ 模板时,会这样理解: “模板是一种代码生成机制,编译器在编译时会根据不同类型生成不同版本的函数或类。” 乍一看没错,比如: template<typename T> void print(T x) { std::cout << x << std::endl; } int main() { print(42); print("Hello"); } 似乎编译器确实“生成了两份函数”: print<int>(int) 与 print<const

By Ne0inhk
【C++贪心】P8769 [蓝桥杯 2021 国 C] 巧克力|普及+

【C++贪心】P8769 [蓝桥杯 2021 国 C] 巧克力|普及+

本文涉及知识点 C++贪心 [蓝桥杯 2021 国 C] 巧克力 题目描述 小蓝很喜欢吃巧克力,他每天都要吃一块巧克力。 一天小蓝到超市想买一些巧克力。超市的货架上有很多种巧克力,每种巧克力有自己的价格、数量和剩余的保质期天数,小蓝只吃没过保质期的巧克力,请问小蓝最少花多少钱能买到让自己吃 x x x 天的巧克力。 输入格式 输入的第一行包含两个整数 x x x, n n n,分别表示需要吃巧克力的天数和巧克力的种类数。 接下来 n n n 行描述货架上的巧克力,其中第 i i i 行包含三个整数 a i a_i ai , b i b_i bi

By Ne0inhk

揭秘C++26新特性:CPU亲和性控制如何让多线程性能飙升(专家级指南)

第一章:C++26 CPU亲和性与性能优化概述 在高性能计算和实时系统开发中,CPU亲和性控制成为提升程序执行效率的关键技术之一。C++26标准正在积极引入对硬件资源调度的底层支持,允许开发者通过标准化接口绑定线程到特定CPU核心,从而减少上下文切换开销、提高缓存命中率,并优化多核并行任务的执行性能。 为何关注CPU亲和性 * 降低线程迁移带来的缓存失效问题 * 增强实时应用的可预测性与响应速度 * 配合NUMA架构实现内存访问局部性优化 标准库中的预期接口设计 虽然C++26尚未最终定稿,但委员会提案P2173R4建议引入std::execution_context与std::set_affinity等设施。未来可能的用法如下: #include <thread> #include <execution> int main() { std::jthread worker([](std::stop_token st) { // 将当前线程绑定到CPU核心0 std::set_affinity(std::this_thread::get_

By Ne0inhk
C++杂说——命名空间,输入与输出,缺省参数,make/makefile

C++杂说——命名空间,输入与输出,缺省参数,make/makefile

希望你开心,希望你健康,希望你幸福,希望你点赞! 最后的最后,关注喵,关注喵,关注喵,大大会看到更多有趣的博客哦!!! 喵喵喵,你对我真的很重要! 命名空间 命名空间编译默认查找顺序: a、当前局部域 : 自留地 b、全局域找 : 村子野地 c, 不会到其他命名空间中去找 : 隔壁张大爷自留地 命名空间展开三种 1、指定访问 2、全展开 //// 展开命名空间 //using namespace bit; //using namespace xjh; 3、指定展开某一个(经常使用,可以展开它一个) // 指定展开某一个 //using bit::x; 命名空间可以为: // 局部域 // 全局域 // 命名空间域 // 不同域可以定义同名的变量/函数/类型 两个私有的命名空间最好不要同时展开,

By Ne0inhk