解决ideatomcatUnrecognized option:--add-opens=java.base/java.lang=ALL-UNNAMEDError:Could not create th

在这里插入图片描述
错误信息:Unrecognized option:–add-opens=java.base/java.lang=ALL-UNNAMEDError:Could not create the Java Virtual Machine.Error: A fatal exception has occurred. Program will exit.


从JDK 9开始,Java增加了模块化系统,引入了–add-opens参数来允许访问模块内部包。但是,JDK 1.8并没有这个参数。因此,当Tomcat 10尝试使用这个参数时,JDK 1.8无法识别并抛出了错误。


在使用tomcat10+时,可能会遇到这种错误,其实你应该参照tomcat官方的jdk和tomcat版本对应表来下载tomcat
在这里插入图片描述


如果你不想更新jdk的版本,那么可以屏蔽该参数
可以尝试修改Tomcat的JVM配置。找到Tomcat的启动脚本(例如catalina.sh或catalina.bat),找到JVM参数部分,并移除或注释掉与–add-opens相关的行。
如果你选择修改Tomcat配置,请按照以下步骤操作:


打开Tomcat的启动脚本(例如catalina.sh或catalina.bat)。
2024年2月27日21:28:40补充一下,文件在tomcat安装目录,有问题随时评论区留言,很快回复。各位大佬们加油!
在这里插入图片描述

在脚本中找到JVM参数部分,通常在JAVA_OPTS变量中。
查找与–add-opens相关的行,并将其移除或注释掉(在行的开头添加#符号)。
保存脚本并重新启动Tomcat服务器。


通过以上步骤,你应该能够解决在JDK 1.8环境下运行Tomcat 10时遇到的错误。请注意,如果你选择升级JDK版本,确保与Tomcat版本兼容,并注意可能存在的其他依赖性问题。
另外,如果你不确定如何修改Tomcat配置或升级JDK版本,请参考官方文档或寻求专业帮助。在进行任何系统更改之前,请务必备份重要数据以防万一。


总结:这个错误是由于在JDK 1.8环境下使用Tomcat 10的JVM参数不兼容导致的。通过升级JDK版本或修改Tomcat配置,你可以解决这个问题。在进行更改之前,请确保备份重要数据并仔细阅读相关文档。
借鉴于百度开发者中心


最后可能还一种错误,即电脑存在多个jdk环境变量。要调整idea所有关于jdk使用处的jdk版本,有可能使用不对导致的。
我这里以前在变量添加了备注名,但是他实际上还是1.8的版本。
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
打开方式(小白看)
在这里插入图片描述
于2024年2月27日21:33:52更新
javaweb更新中,该内容为javaweb笔记的扩展内容,如需复习javaweb servlet jsp ssm等内容可以查看这篇文章

javaweb笔记

### 回答1: /java.io=all-unnamed --add-opens=java.rmi/sun.rmi.transport.tcp=ALL-UNNAMED 这是一条命令,用于设置 JDK 的 Java 选项。其中,--add-opens 参数用于打开指定模块的包,以便其他模块可以访问它们。这里指定了三个模块:java.basejava.io 和 java.rmi。ALL-UNNAMED 表示打开这些模块中所有未命名的包。 ### 回答2: 在Java应用程序中,我们可以使用JDK来编写和运行代码。在运行JDK时,可能需要使用某些选项来控制它的行为。例如,在运行Java虚拟机时,我们可以添加一些选项来指定JVM的行为,以满足我们的需求。 在这里,我们提到的选项是“picked up jdk_java_options: --add-opens=java.base/java.lang=all-unnamed --add-opens=java.base”。这个选项的作用是打开一些Java模块的深层命名空间,确保它们的访问正确而安全。对于不熟悉Java模块化系统的读者,这可能听起来很困惑,让我们进一步解释。 JDK 9引入了Java模块化系统,它允许将代码组织成离散、可重用和可测试的单元。Java模块可以定义和隔离它们自己的API和实现细节,并将其公开给其他模块。这有助于减少Java应用程序中的依赖和耦合,从而提高了应用程序的健壮性和可维护性。 然而,Java模块化系统引入了一些新的访问控制机制,如模块路径和模块化关键字。这些机制有时会导致某些模块无法加载或访问。在这种情况下,“--add-opens”选项可以打开深层命名空间,以确保所有的模块都能够被正确加载和访问。 具体来说,“--add-opens=java.base/java.lang=all-unnamed --add-opens=java.base”选项打开了java.base模块的所有Java.lang包的未命名访问层级。这意味着包中的所有类都可以被其他模块访问,而不需要将Java.lang包的任何内容导出到外部世界。 总之,“--add-opens”选项在一些情况下是必要的,可以确保Java应用程序中的所有模块被正确加载和访问。然而,在使用此选项时,需要谨慎,并确保了解其背后的原因和实现细节。 ### 回答3: 这段话涉及到了JDK的Java选项中的add-opens参数。add-opens参数是JDK 9中引入的一项新功能,用于控制Java程序在运行时能够打开哪些包以便运行。它主要用于解决在新的模块化系统中,由于禁止在模块外部访问模块内部的包,导致一些老代码无法正常运行的问题。 具体来说,add-opens参数可以通过以下方式使用: --add-opens=module/package=othermodule(,othermodule)* 其中,module表示需要打开的模块,package表示需要打开的包,othermodule表示可以访问该模块内部包的其他模块。可以通过逗号分隔来指定多个模块或其他模块。 在这段话中,选项为--add-opens=java.base/java.lang=all-unnamed --add-opens=java.base。意思是打开java.base模块中所有未命名的java.lang包以及整个java.base模块。这样做是为了解决一些第三方库在运行时需要访问java.base模块中的一些类或方法,但在JDK 9之后由于模块化限制而无法访问。 综上,add-opens参数是JDK 9中新增的一个功能,可以用于控制Java程序在运行时打开哪些包以便运行。通过指定模块、包和其他模块的方式,可以解决一些老代码在模块化系统下无法正常运行的问题。在这段话中,指定了打开java.base模块中所有未命名的java.lang包以及整个java.base模块,以便确保第三方库能够正常运行。
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值