java.lang.ClassNotFoundException: ?

错误信息 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

操作步骤

  1. 右键 “此电脑” → “属性” → “高级系统设置” → “环境变量”。
  2. 在 “系统变量” 中点击 “新建”,输入:
    • 变量名MAVEN_OPTS
    • 变量值-Dfile.encoding=UTF-8
  3. 重启命令行窗口后,运行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 默认编码)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值