我在Jetty11.0.9中使用Java 17。我使用以下命令启动Jetty
java --add-opens=java.base/java.lang=ALL-UNNAMED -jar start.jar
然后我将面临例外情况。
2022-05-06 16:40:45.314:WARN :oejw.WebAppContext:main: Failed startup of context o.e.j.w.WebAppContext@593aaf41{vte.cx (alpha),/vtecx,file:///usr/local/jetty-home-11.0.9/webapps/vtecx/,UNAVAILABLE}{/usr/local/jetty-home-11.0.9/webapps/vtecx}
java.lang.IllegalAccessError: class jdk.internal.reflect.ConstructorAccessorImpl loaded by javassist.Loader @46292372 cannot access jdk/internal/reflect superclass jdk.internal.reflect.MagicAccessorImpl
at java.base/java.lang.ClassLoader.defineClass1(Native Method)
at java.base/java.lang.ClassLoader.defineClass(ClassLoader.java:1012)
at java.base/java.lang.ClassLoader.defineClass(ClassLoader.java:874)
at javassist.Loader.findClass(Loader.java:419)
at javassist.Loader.loadClass(Loader.java:350)
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:520)
at java.base/java.lang.ClassLoader.defineClass1(Native Method)
at java.base/java.lang.System$2.defineClass(System.java:2303)
at java.base/jdk.internal.reflect.ClassDefiner.defineClass(ClassDefiner.java:66)
at java.base/jdk.internal.reflect.MethodAccessorGenerator$1.run(MethodAccessorGenerator.java:401)
at java.base/jdk.internal.reflect.MethodAccessorGenerator$1.run(MethodAccessorGenerator.java:395)
at java.base/java.security.AccessController.doPrivileged(AccessController.java:318)
at java.base/jdk.internal.reflect.MethodAccessorGenerator.generate(MethodAccessorGenerator.java:394)
at java.base/jdk.internal.reflect.MethodAccessorGenerator.generateConstructor(MethodAccessorGenerator.java:92)
at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:65)
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.ReflectAccess.newInstance(ReflectAccess.java:128)
at java.base/jdk.internal.reflect.ReflectionFactory.newInstance(ReflectionFactory.java:347)
at java.base/java.lang.Class.newInstance(Class.java:645)
at org.msgpack.template.builder.ReflectionTemplateBuilder$ReflectionClassTemplate.read(ReflectionTemplateBuilder.java:132)
at org.msgpack.template.AbstractTemplate.read(AbstractTemplate.java:31)
at org.msgpack.template.ListTemplate.read(ListTemplate.java:66)
at org.msgpack.template.ListTemplate.read(ListTemplate.java:27)
at org.msgpack.template.builder.ReflectionTemplateBuilder$FieldTemplateImpl.read(ReflectionTemplateBuilder.java:70)
at org.msgpack.template.builder.ReflectionTemplateBuilder$ReflectionClassTemplate.read(ReflectionTemplateBuilder.java:143)
at org.msgpack.template.AbstractTemplate.read(AbstractTemplate.java:31)
at org.msgpack.MessagePack.read(MessagePack.java:388)
at org.msgpack.MessagePack.read(MessagePack.java:371)
at jp.reflexworks.atom.mapper.FeedTemplateMapper.fromMessagePack(FeedTemplateMapper.java:1014)
我已经确认它在一个非servlet独立的环境中工作得很好。--add-opens
参数在servlet环境中正确工作吗?或者可能是其他原因造成的,比如javassist?
单元测试确实成功。它在Jetty上也没有完全失败,它似乎被正确地处理到了中间点。看起来,在线程中运行多个运行时也会发生错误。
-列表-配置如下
$ java -jar start.jar --list-config
Enabled Modules:
----------------
0) bytebufferpool transitive provider of bytebufferpool for server
ini template available with --add-module=bytebufferpool
1) resources transitive provider of resources for logging-jetty
2) logging/slf4j transitive provider of logging/slf4j for logging-jetty
dynamic dependency of logging-jetty
3) logging-jetty transitive provider of logging for threadpool
transitive provider of logging for server
4) threadpool transitive provider of threadpool for server
ini template available with --add-module=threadpool
5) server ${jetty.base}/start.d/server.ini
6) jndi transitive provider of jndi for plus
7) security transitive provider of security for webapp
transitive provider of security for plus
8) servlet transitive provider of servlet for webapp
9) webapp transitive provider of webapp for plus
transitive provider of webapp for deploy
ini template available with --add-module=webapp
10) plus transitive provider of plus for annotations
11) annotations transitive provider of annotations for websocket-jetty
12) client transitive provider of client for websocket-jakarta
13) deploy ${jetty.base}/start.d/deploy.ini
14) http ${jetty.base}/start.d/http.ini
15) ssl ${jetty.base}/start.d/ssl.ini
16) https ${jetty.base}/start.d/https.ini
17) rewrite ${jetty.base}/start.d/rewrite.ini
18) websocket-jakarta transitive provider of websocket-jakarta for websocket
19) websocket-jetty transitive provider of websocket-jetty for websocket
20) websocket ${jetty.base}/start.d/websocket.ini
Java Environment:
-----------------
java.home = /Library/Java/JavaVirtualMachines/jdk-17.0.3.jdk/Contents/Home
java.vm.vendor = Oracle Corporation
java.vm.version = 17.0.3+8-LTS-111
java.vm.name = Java HotSpot(TM) 64-Bit Server VM
java.vm.info = mixed mode, sharing
java.runtime.name = Java(TM) SE Runtime Environment
java.runtime.version = 17.0.3+8-LTS-111
java.io.tmpdir = /var/folders/jd/sclp7v4j4fxgmx00hw47q1vm0000gn/T/
user.dir = /usr/local/jetty-home-11.0.9
user.language = ja
user.country = JP
Jetty Environment:
------------------
jetty.version = 11.0.9
jetty.tag.version = jetty-11.0.9
jetty.build = 243a48a658a183130a8c8de353178d154ca04f04
jetty.home = /usr/local/jetty-home-11.0.9
jetty.base = /usr/local/jetty-home-11.0.9
Config Search Order:
--------------------
<command-line>
${jetty.base} -> /usr/local/jetty-home-11.0.9
${jetty.home} -> /usr/local/jetty-home-11.0.9
System Properties:
------------------
(no system properties specified)
Properties:
-----------
java.version = 17.0.3
java.version.major = 17
java.version.micro = 3
java.version.minor = 0
java.version.platform = 17
jetty.base = /usr/local/jetty-home-11.0.9
jetty.base.uri = file:///usr/local/jetty-home-11.0.9
jetty.home = /usr/local/jetty-home-11.0.9
jetty.home.uri = file:///usr/local/jetty-home-11.0.9
jetty.sslContext.keyStorePassword = OBF:xxxxxxxxxx
jetty.webapp.addServerClasses = org.eclipse.jetty.logging.,${jetty.home.uri}/lib/logging/,org.slf4j.
runtime.feature.alpn = true
slf4j.version = 2.0.0-alpha6
Jetty Server Classpath:
-----------------------
Version Information on 36 entries in the classpath.
Note: order presented here is how they would appear on the classpath.
changes to the --module=name command line options will be reflected here.
0: (dir) | ${jetty.base}/resources
1: 2.0.0-alpha6 | ${jetty.base}/lib/logging/slf4j-api-2.0.0-alpha6.jar
2: 11.0.9 | ${jetty.base}/lib/logging/jetty-slf4j-impl-11.0.9.jar
3: 5.0.2 | ${jetty.base}/lib/jetty-jakarta-servlet-api-5.0.2.jar
4: 11.0.9 | ${jetty.base}/lib/jetty-http-11.0.9.jar
5: 11.0.9 | ${jetty.base}/lib/jetty-server-11.0.9.jar
6: 11.0.9 | ${jetty.base}/lib/jetty-xml-11.0.9.jar
7: 11.0.9 | ${jetty.base}/lib/jetty-util-11.0.9.jar
8: 11.0.9 | ${jetty.base}/lib/jetty-io-11.0.9.jar
9: 11.0.9 | ${jetty.base}/lib/jetty-jndi-11.0.9.jar
10: 11.0.9 | ${jetty.base}/lib/jetty-security-11.0.9.jar
11: 11.0.9 | ${jetty.base}/lib/jetty-servlet-11.0.9.jar
12: 11.0.9 | ${jetty.base}/lib/jetty-webapp-11.0.9.jar
13: 11.0.9 | ${jetty.base}/lib/jetty-plus-11.0.9.jar
14: 2.0.0 | ${jetty.base}/lib/jakarta.transaction-api-2.0.0.jar
15: 11.0.9 | ${jetty.base}/lib/jetty-annotations-11.0.9.jar
16: 9.2 | ${jetty.base}/lib/annotations/asm-9.2.jar
17: 9.2 | ${jetty.base}/lib/annotations/asm-analysis-9.2.jar
18: 9.2 | ${jetty.base}/lib/annotations/asm-commons-9.2.jar
19: 9.2 | ${jetty.base}/lib/annotations/asm-tree-9.2.jar
20: 2.0.0 | ${jetty.base}/lib/annotations/jakarta.annotation-api-2.0.0.jar
21: 11.0.9 | ${jetty.base}/lib/jetty-client-11.0.9.jar
22: 11.0.9 | ${jetty.base}/lib/jetty-alpn-client-11.0.9.jar
23: 11.0.9 | ${jetty.base}/lib/jetty-deploy-11.0.9.jar
24: 11.0.9 | ${jetty.base}/lib/jetty-rewrite-11.0.9.jar
25: 11.0.9 | ${jetty.base}/lib/websocket/websocket-core-common-11.0.9.jar
26: 11.0.9 | ${jetty.base}/lib/websocket/websocket-core-client-11.0.9.jar
27: 11.0.9 | ${jetty.base}/lib/websocket/websocket-core-server-11.0.9.jar
28: 11.0.9 | ${jetty.base}/lib/websocket/websocket-servlet-11.0.9.jar
29: 2.0.0 | ${jetty.base}/lib/websocket/jetty-jakarta-websocket-api-2.0.0.jar
30: 11.0.9 | ${jetty.base}/lib/websocket/websocket-jakarta-client-11.0.9.jar
31: 11.0.9 | ${jetty.base}/lib/websocket/websocket-jakarta-common-11.0.9.jar
32: 11.0.9 | ${jetty.base}/lib/websocket/websocket-jakarta-server-11.0.9.jar
33: 11.0.9 | ${jetty.base}/lib/websocket/websocket-jetty-api-11.0.9.jar
34: 11.0.9 | ${jetty.base}/lib/websocket/websocket-jetty-common-11.0.9.jar
35: 11.0.9 | ${jetty.base}/lib/websocket/websocket-jetty-server-11.0.9.jar
Jetty Active XMLs:
------------------
${jetty.base}/etc/jetty-bytebufferpool.xml
${jetty.base}/etc/jetty-threadpool.xml
${jetty.base}/etc/jetty.xml
${jetty.base}/etc/jetty-webapp.xml
${jetty.base}/etc/jetty-deploy.xml
${jetty.base}/etc/jetty-http.xml
${jetty.base}/etc/jetty-ssl.xml
${jetty.base}/etc/jetty-ssl-context.xml
${jetty.base}/etc/jetty-https.xml
${jetty.base}/etc/jetty-rewrite.xml
${jetty.base}/etc/rewrite-rules.xml
发布于 2022-05-09 04:36:58
在Java 11+上运行时,您的javassist版本与Servlet类加载器的要求不兼容。
您需要等待javAssist3.29发行版(它还不存在),它将javassist.Loader
修复为忽略jdk.internal.*
类。
请参阅:https://github.com/jboss-javassist/javassist/commit/b9a24bf129ef8b3295f99fdd43131301c1da8132
您需要使用上面提交的版本。
https://stackoverflow.com/questions/72142649
复制