运行程序时出现日志和警告:WARNING: An illegal reflective access operation has occurredWARNING: Illegal

该文指出,当使用JDK11运行Spark时可能会遇到非法反射访问警告。为消除这些警告,可以通过创建log4j.properties文件来设置日志级别为ERROR,以减少不必要的输出信息。特别地,文件中列出了针对特定Spark组件和第三方库的日志级别设置。如果警告依然存在,文章建议进一步采取措施处理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

问题描述:

WARNING: An illegal reflective access operation has occurred
WARNING: Illegal reflective access by org.apache.spark.unsafe.Platform (file:/D:/maven/maven-repo/org/apache/spark/spark-unsafe_2.12/3.0.0/spark-unsafe_2.12-3.0.0.jar) to constructor java.nio.DirectByteBuffer(long,int)
WARNING: Please consider reporting this to the maintainers of org.apache.spark.unsafe.Platform
WARNING: Use --illegal-access=warn to enable warnings of further illegal reflective access operations
WARNING: All illegal access operations will be denied in a future release

……

原因分析:

可能是因为版本过高,只要使用jdk11大多数都有此种情况,

解决方法

①在项目的resources目录中创建log4j.properties文件

log4j.rootCategory=ERROR, console

log4j.appender.console=org.apache.log4j.ConsoleAppender

log4j.appender.console.target=System.err

log4j.appender.console.layout=org.apache.log4j.PatternLayout

log4j.appender.console.layout.ConversionPattern=%d{yy/MM/dd HH:mm:ss} %p %c{1}: %m%n

# Set the default spark-shell log level to ERROR. When running the spark-shell, the

# log level for this class is used to overwrite the root logger's log level, so that

# the user can have different defaults for the shell and regular Spark apps.

log4j.logger.org.apache.spark.repl.Main=ERROR

# Settings to quiet third party logs that are too verbose

log4j.logger.org.spark_project.jetty=ERROR

log4j.logger.org.spark_project.jetty.util.component.AbstractLifeCycle=ERROR

log4j.logger.org.apache.spark.repl.SparkIMain$exprTyper=ERROR

log4j.logger.org.apache.spark.repl.SparkILoop$SparkILoopInterpreter=ERROR

log4j.logger.org.apache.parquet=ERROR

log4j.logger.parquet=ERROR

# SPARK-9183: Settings to avoid annoying messages when looking up nonexistent UDFs in SparkSQL with Hive support

log4j.logger.org.apache.hadoop.hive.metastore.RetryingHMSHandler=FATAL

log4j.logger.org.apache.hadoop.hive.ql.exec.FunctionRegistry=ERROR

 ②如果还有警告日志,执行此步骤,如果没有请忽略。亲测!!!

<think>好的,我现在需要解决用户关于Jenkins出现“非法反射访问操作”警告的问题。用户提到的是Java的反射访问警告,这通常发生在使用较新版本的Java运行旧版本的库或代码。首先,我需要回忆一下Java 9引入的模块化系统,因为这个问题通常与模块系统的访问限制有关。 首先,用户可能使用的是Java 11或更高版本运行Jenkins,而Jenkins的某些插件或依赖可能没有更新到兼容的版本。这候,Java会抛出这样的警告,提示有代码通过反射访问了内部API,这在未来的版本中可能会被禁止。 接下来,我需要考虑常见的解决方案。通常,解决方法包括升级Jenkins到最新版本,因为新版本可能已经修复了这些兼容性问题。另外,检查插件是否更新也很重要,因为过的插件可能依赖旧库。如果升级后问题依旧,可能需要调整Java的启动参数,比如添加`--add-opens`来允许特定的模块被反射访问。 还要考虑用户的环境,比如他们使用的Jenkins版本、Java版本以及具体的警告信息内容。不同的警告可能需要不同的模块开放。例如,如果警告涉及`java.base/java.lang`,那么对应的启动参数应该是`--add-opens java.base/java.lang=ALL-UNNAMED`。 此外,用户可能需要检查是否有自定义的插件或脚本导致这个问题。如果是内部开发的插件,可能需要修改代码以避免使用反射访问内部API。不过,对于大多数用户来说,更实际的方法可能是通过调整JVM参数来暂抑制警告,同等待官方更新。 最后,需要提醒用户,虽然添加JVM参数可以解决警告,但这只是一个临措施,长期解决方案还是需要升级到修复后的版本。同,注意不要随意开放所有模块,以免带来安全风险。 总结步骤应该是:1. 升级Jenkins;2. 更新所有插件;3. 添加必要的JVM参数;4. 检查自定义代码或插件。如果用户无法立即升级,提供具体的启动参数示例会很有帮助。另外,参考信息中的ZOOKEEPER相关问题可能不直接相关,但说明软件更新常解决此类兼容性问题,可以引用作为类似情况的处理方式。</think>### Jenkins 'illegal reflective access operation' 警告解决方案 Jenkins 在启动或运行出现 `illegal reflective access operation` 警告,通常是由于 Java 9+ 模块系统对反射操作的限制引起的[^1]。以下是分步解决方案: --- #### **1. 升级 Jenkins 及插件** - **原因**:旧版 Jenkins 或插件可能使用了不兼容新 Java 版本的反射操作。 - **操作**: 1. 升级 Jenkins 到最新长期支持版(LTS)。 2. 在 Jenkins 管理界面更新所有插件。 - **示例命令**(通过 Docker): ```bash docker pull jenkins/jenkins:lts ``` --- #### **2. 调整 JVM 启动参数** - **原因**:通过开放特定模块权限,临允许反射访问。 - **操作**: 修改 Jenkins 启动脚本(如 `jenkins.sh` 或 `systemd` 服务文件),添加以下参数: ```bash JAVA_OPTS="--add-opens java.base/java.lang=ALL-UNNAMED --add-opens java.base/java.util=ALL-UNNAMED" ``` - **注意**:需根据具体警告内容调整模块名(如 `java.base/java.io`)。 --- #### **3. 降级 Java 版本(临方案)** - **原因**:Java 8 无模块系统限制,但长期不推荐。 - **操作**: 安装 Java 8 并配置 Jenkins 使用: ```bash sudo update-alternatives --config java # 选择 Java 8 ``` --- #### **4. 检查自定义插件或脚本** - **原因**:自行开发的插件可能包含非法反射代码。 - **操作**: 1. 使用 `mvn dependency:tree` 检查依赖冲突。 2. 替换或更新使用 `sun.*` 等内部 API 的代码。 --- #### **总结** | 方案 | 适用场景 | 优先级 | |--------------|---------------------------|--------| | 升级 Jenkins | 官方已修复兼容性问题 | 高 | | 调整 JVM 参数| 临解决警告 | 中 | | 降级 Java | 紧急情况下短期使用 | 低 | ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值