错误信息 java.lang.ClassNotFoundException: ?
和命令行参数,这是典型的 参数格式错误 或 编码问题 导致的 Maven 无法解析主类。以下是详细的排查和解决方案:
一、命令行中输入 mvn -v
1.platform encoding
是什么?
- 平台编码(Platform Encoding) 是操作系统或运行环境默认使用的字符编码方式,用于处理文件系统、环境变量、命令行输入输出等场景中的字符编码问题。
- 在我的环境中,Java 运行时(JRE)检测到操作系统的默认编码是 GBK,因此 Maven 输出中显示这一信息。
2.为什么显示为 GBK?
- 操作系统区域设置:我的 Windows 10 系统区域设置可能是 中文(中国)(对应
Default locale: zh_CN
),因此默认使用 GBK 作为平台编码。 - 历史原因:早期 Windows 系统(如 Windows 9x/XP)在中文环境下默认使用 GBK 编码,即使在现代系统(如 Windows 10)中,若未显式修改区域设置,仍可能继承这一编码。
二、在 VM Options 中添加-DarchetypeCatalog=internal。这句话的作用?
原型与原型目录基础概念
Maven 原型是创建项目的模板,借助它能快速搭建项目的基础结构,例如生成项目目录、文件等。而原型目录则是存放可用原型信息的地方,Maven 会依据这个目录去查找合适的原型来创建项目。原型目录可以分为内部目录和外部目录,前者是 Maven 自带的,后者通常指远程仓库中的原型目录。
-DarchetypeCatalog=internal
的作用
1. 限制搜索范围
添加该参数后,Maven 在搜索原型时,只会考虑内部原型目录里的原型。内部原型目录包含了 Maven 默认自带的一系列常用原型,这些原型会随着 Maven 的安装一同被部署。比如,创建一个简单的 Java 项目、Web 项目等都可以使用内部原型来完成。这就避免了 Maven 去搜索外部的远程仓库或者本地缓存中的原型。
2. 提升创建项目的速度
由于不用连接到远程仓库去获取原型列表,也不用在本地缓存中查找更多原型,搜索范围的缩小使得 Maven 能够更快地找到合适的原型并创建项目。在网络状况不佳或者需要快速搭建项目框架时,这种方式能节省大量时间。
3. 适用于离线环境
当处于没有网络连接的环境时,无法访问远程仓库的原型目录。使用内部原型目录,就可以继续利用 Maven 自带的原型来创建项目,保证开发工作的正常进行。
4. 增强安全性
只使用内部原型目录意味着不依赖外部未知来源的原型,降低了引入恶意代码或者不可信代码的风险,增强了项目的安全性。
三、在 VM Options 中添加 -Dfile.encoding=UTF-8。这句话的作用?
统一编码格式
在 Maven 构建过程中,会涉及到大量文件的读取和处理,例如 Java 源文件、配置文件等。不同的操作系统、开发工具和环境可能默认使用不同的字符编码。如果编码不一致,就可能导致文件中的字符无法正确解析,出现乱码问题。通过设置 -Dfile.encoding=UTF-8
,可以确保 Maven 在运行过程中统一使用 UTF - 8 编码来处理文件,从而避免因编码不一致而产生的乱码。
保证日志和输出信息的正确性
Maven 在执行构建任务时,会输出大量的日志信息,这些信息可能包含中文或其他非 ASCII 字符。如果没有统一的编码设置,日志信息在控制台或日志文件中可能会显示乱码,影响开发者对构建过程的监控和问题排查。设置 -Dfile.encoding=UTF-8
可以保证日志信息以正确的编码显示,使开发者能够准确地查看和理解构建过程中的各种信息。
避免资源文件处理时的编码问题
在 Maven 项目中,通常会包含各种资源文件,如 properties 文件、xml 文件等。这些文件中可能包含多语言文本或特殊字符。当 Maven 对这些资源文件进行处理(如打包、过滤等)时,如果编码不一致,就可能导致文件内容被错误处理。使用 -Dfile.encoding=UTF-8
可以确保 Maven 在处理这些资源文件时采用统一的 UTF - 8 编码,保证文件内容的正确性。
提高项目的可移植性
在不同的开发环境和操作系统中,默认的字符编码可能不同。通过明确设置 Maven 的编码为 UTF - 8,可以使项目在不同环境下都能保持一致的编码处理方式,提高项目的可移植性,避免因环境差异导致的编码问题。
当我添加这句话是,程序得以解决
四、将 Maven 的platform encoding: GBK
修改为 UTF-8
1. 通过环境变量全局设置(推荐)
在系统环境变量中添加以下配置:
MAVEN_OPTS=-Dfile.encoding=UTF-8
操作步骤:
- 右键 “此电脑” → “属性” → “高级系统设置” → “环境变量”。
- 在 “系统变量” 中点击 “新建”,输入:
- 变量名:
MAVEN_OPTS
- 变量值:
-Dfile.encoding=UTF-8
- 重启命令行窗口后,运行
mvn -v
验证编码是否变更。
2.修改 Maven 配置文件
在 Maven 的settings.xml
中添加编码配置:
<settings>
<properties>
<file.encoding>UTF-8</file.encoding>
</properties>
</settings>
文件路径:
- 全局配置:
D:\javaee\apache-maven-3.9.7\conf\settings.xml
- 用户配置:
C:\Users\86178\.m2\settings.xml
(若不存在则创建)
3. 项目级 pom.xml 配置
在项目的pom.xml
中添加以下内容:
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
</properties>
作用范围:仅对当前项目生效。
五、进阶排查
1. 验证 Java 运行时编码
在命令行执行以下命令,检查 JRE 默认编码:
java -XshowSettings:properties -version
若仍显示GBK
,需进一步排查:
- JRE 安装路径是否包含中文或特殊字符。
- 系统区域设置是否为中文(可能影响 JRE 默认编码)。