我们正在使用 Wildfly 10.0.1 并计划切换到 JDK 17 LTS。
我刚刚在 Mac 上安装了新的 JDK,并下载了 Wildfly 10.0.1 的干净版本(没有部署、没有配置更改等)。
当我尝试运行 Wildfly (./standalone.sh) 时,出现以下错误:
./standalone.sh
WARNING: JBOSS_HOME may be pointing to a different installation - unpredictable results may occur.
JBOSS_HOME: /opt/wildfly_clean
=========================================================================
JBoss Bootstrap Environment
JBOSS_HOME: /opt/wildfly_clean
JAVA: /Library/Java/JavaVirtualMachines/jdk-17.0.1.jdk/Contents/Home/bin/java
JAVA_OPTS: -server -Xms64m -Xmx512m -XX:MetaspaceSize=96M -XX:MaxMetaspaceSize=256m -Djava.net.preferIPv4Stack=true -Djboss.modules.system.pkgs=org.jboss.byteman -Djava.awt.headless=true
=========================================================================
Exception in thread "main" javax.xml.stream.FactoryConfigurationError: Provider com.sun.xml.internal.stream.XMLInputFactoryImpl could not be instantiated: java.lang.reflect.InvocationTargetException
at java.xml/javax.xml.stream.FactoryFinder.newInstance(FactoryFinder.java:201)
at java.xml/javax.xml.stream.FactoryFinder.newInstance(FactoryFinder.java:148)
at java.xml/javax.xml.stream.FactoryFinder.find(FactoryFinder.java:326)
at java.xml/javax.xml.stream.FactoryFinder.find(FactoryFinder.java:223)
at java.xml/javax.xml.stream.XMLInputFactory.newInstance(XMLInputFactory.java:166)
at __redirected.__XMLInputFactory.<clinit>(__XMLInputFactory.java:66)
at __redirected.__JAXPRedirected.initAll(__JAXPRedirected.java:77)
at org.jboss.modules.Module$1.run(Module.java:132)
at org.jboss.modules.Module$1.run(Module.java:119)
at java.base/java.security.AccessController.doPrivileged(AccessController.java:318)
at org.jboss.modules.Module.<clinit>(Module.java:119)
at org.jboss.modules.Main.main(Main.java:385)
Caused by: java.lang.reflect.InvocationTargetException
at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:77)
at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.base/java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:499)
at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:480)
at java.xml/javax.xml.stream.FactoryFinder.newInstance(FactoryFinder.java:190)
... 11 more
Caused by: javax.xml.parsers.FactoryConfigurationError: Provider __redirected.__SAXParserFactory could not be instantiated: java.lang.reflect.InvocationTargetException
at java.xml/javax.xml.parsers.FactoryFinder.newInstance(FactoryFinder.java:199)
at java.xml/javax.xml.parsers.FactoryFinder.newInstance(FactoryFinder.java:147)
at java.xml/javax.xml.parsers.FactoryFinder.find(FactoryFinder.java:227)
at java.xml/javax.xml.parsers.SAXParserFactory.newInstance(SAXParserFactory.java:181)
at java.xml/jdk.xml.internal.JdkXmlUtils.getSAXFactory(JdkXmlUtils.java:352)
at java.xml/jdk.xml.internal.JdkXmlUtils.<clinit>(JdkXmlUtils.java:89)
at java.xml/com.sun.org.apache.xerces.internal.impl.PropertyManager.initConfigurableReaderProperties(PropertyManager.java:144)
at java.xml/com.sun.org.apache.xerces.internal.impl.PropertyManager.<init>(PropertyManager.java:78)
at java.xml/com.sun.xml.internal.stream.XMLInputFactoryImpl.<init>(XMLInputFactoryImpl.java:51)
... 17 more
Caused by: java.lang.reflect.InvocationTargetException
at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:77)
at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.base/java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:499)
at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:480)
at java.xml/javax.xml.parsers.FactoryFinder.newInstance(FactoryFinder.java:188)
... 25 more
Caused by: java.lang.IllegalAccessError: class __redirected.__SAXParserFactory cannot access class com.sun.org.apache.xerces.internal.jaxp.SAXParserFactoryImpl (in module java.xml) because module java.xml does not export com.sun.org.apache.xerces.internal.jaxp to unnamed module @2b05039f
at java.base/jdk.internal.reflect.Reflection.newIllegalAccessException(Reflection.java:392)
at java.base/java.lang.reflect.AccessibleObject.checkAccess(AccessibleObject.java:674)
at java.base/java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:489)
at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:480)
at __redirected.__SAXParserFactory.<init>(__SAXParserFactory.java:106)
... 31 more
iNet上没有太多相关信息。
所以,我的问题是这些错误意味着什么?是否可以做一些事情(更改 JAVA_OPTS 等)以在 JDK 17 上成功运行 Wildfly。
是否可以在 JDK 17 上运行 Wildfly 10?
谢谢你。
尝试使用以下配置
--add-opens java.xml/jdk.xml.internal=ALL-UNNAMED
这将打开此模块以进行外部访问。
原因是
根据JDK9文档
一些工具和库使用反射来访问部分内容 JDK 仅供内部使用。这种违法反光 在 JDK 的未来版本中将禁用访问。在 JDK 9 中, 默认情况下允许并发出警告。
JEP 396 已经改变了这一点,JEP 396 包含在 JDK 17 中,最初是从 JDK 16 交付的
https://openjdk.java.net/jeps/396
因此从 JDK 16 开始,所有 java 内部默认都是强封装的,不允许通过反射进行外部访问。因此您看到的错误
谢谢你们为我指明了正确的方向。
我能够在 JDK 17 LTS 中运行 Wildfly 10,并将以下选项添加到启动 shell 脚本中:
JAVA_OPTS="$JAVA_OPTS --add-opens java.xml/com.sun.org.apache.xerces.internal.jaxp=ALL-UNNAMED"
JAVA_OPTS="$JAVA_OPTS --add-opens java.base/java.lang=ALL-UNNAMED"
JAVA_OPTS="$JAVA_OPTS --add-opens=java.base/java.security=ALL-UNNAMED"
这是运行脚本的输出:
./standalone.sh
WARNING: JBOSS_HOME may be pointing to a different installation - unpredictable results may occur.
JBOSS_HOME: /opt/wildfly_clean
=========================================================================
JBoss Bootstrap Environment
JBOSS_HOME: /opt/wildfly_clean
JAVA: /Library/Java/JavaVirtualMachines/jdk-17.0.1.jdk/Contents/Home/bin/java
JAVA_OPTS: -server -Xms64m -Xmx512m -XX:MetaspaceSize=96M -XX:MaxMetaspaceSize=256m -Djava.net.preferIPv4Stack=true -Djboss.modules.system.pkgs=org.jboss.byteman -Djava.awt.headless=true --add-opens java.xml/com.sun.org.apache.xerces.internal.jaxp=ALL-UNNAMED --add-opens java.base/java.lang=ALL-UNNAMED --add-opens=java.base/java.security=ALL-UNNAMED
=========================================================================
......
10:34:36,425 INFO [org.jboss.as] (Controller Boot Thread) WFLYSRV0025: WildFly Full 10.1.0.Final (WildFly Core 2.2.0.Final) started in 1339ms - Started 331 of 577 services (393 services are lazy, passive or on-demand)