首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >Jetty17 --add选项不起作用,java.lang.IllegalAccessError

Jetty17 --add选项不起作用,java.lang.IllegalAccessError
EN

Stack Overflow用户
提问于 2022-05-06 13:54:21
回答 1查看 1.6K关注 0票数 0

我在Jetty11.0.9中使用Java 17。我使用以下命令启动Jetty

代码语言:javascript
代码运行次数:0
运行
复制
java --add-opens=java.base/java.lang=ALL-UNNAMED -jar start.jar

然后我将面临例外情况。

代码语言:javascript
代码运行次数:0
运行
复制
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上也没有完全失败,它似乎被正确地处理到了中间点。看起来,在线程中运行多个运行时也会发生错误。

-列表-配置如下

代码语言:javascript
代码运行次数:0
运行
复制
$ 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
EN

回答 1

Stack Overflow用户

发布于 2022-05-09 12:36:58

在Java 11+上运行时,您的javassist版本与Servlet类加载器的要求不兼容。

您需要等待javAssist3.29发行版(它还不存在),它将javassist.Loader修复为忽略jdk.internal.*类。

请参阅:https://github.com/jboss-javassist/javassist/commit/b9a24bf129ef8b3295f99fdd43131301c1da8132

您需要使用上面提交的版本。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72142649

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档