在Eclipse、Tomcat及CentOS中配置EclipseLink javaagent依赖并启用织入
EclipseLink织入功能配置报错及解决方法
问题描述
使用Eclipse、Tomcat与EclipseLink开发Web应用时,需在Eclipse的Java VM参数中配置javaagent:eclipselink.jar以启用EclipseLink织入功能。添加参数-javaagent:/Users/user/Development/lib/eclipselink/2.7.10/eclipselink.jar后,启动Tomcat出现如下报错:
Exception in thread "main" java.lang.reflect.InvocationTargetException at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.base/java.lang.reflect.Method.invoke(Method.java:568) at java.instrument/sun.instrument.InstrumentationImpl.loadClassAndStartAgent(InstrumentationImpl.java:491) at java.instrument/sun.instrument.InstrumentationImpl.loadClassAndCallPremain(InstrumentationImpl.java:503) Caused by: java.lang.NoClassDefFoundError: javax/persistence/spi/PersistenceUnitInfo at java.base/java.lang.Class.forName0(Native Method) at java.base/java.lang.Class.forName(Class.java:375) at org.eclipse.persistence.internal.jpa.deployment.JavaSECMPInitializerAgent.initializeFromAgent(JavaSECMPInitializerAgent.java:46) at org.eclipse.persistence.internal.jpa.deployment.JavaSECMPInitializerAgent.premain(JavaSECMPInitializerAgent.java:41) ... 6 more Caused by: java.lang.ClassNotFoundException: javax.persistence.spi.PersistenceUnitInfo at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:641) at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:188) at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:520) ... 10 more *** java.lang.instrument ASSERTION FAILED ***: "result" with message agent load/premain call failed at open/src/java.instrument/share/native/libinstrument/JPLISAgent.c line: 422 FATAL ERROR in native method: processing of -javaagent failed, processJavaStart failed
补充情况:
- 该配置运行单元测试无报错
- 若以
-Djavaagent:/Users/user/Development/lib/eclipselink/2.7.10/eclipselink.jar启动Tomcat,服务可运行但织入功能未生效
环境信息
- Java 17 SE
- Tomcat 9.0.56
- EclipseLink 2.7.10(用于JPA)
- MySQL 8.0.28
- macOS Ventura
解决方法
推测eclipselink.jar依赖jakarta.persistence_2.2.3.jar,后续找到解决方案:在JVM参数中添加以下配置(CentOS环境下需替换为对应文件路径),即可消除报错并使织入功能正常生效:
-Xbootclasspath/a:/eclipselink/2.7.13/jakarta.persistence_2.2.3.jar -javaagent:/eclipselink/2.7.13/eclipselink_2.7.13.jar
内容的提问来源于stack exchange,提问作者Ndrik7
相关产品推荐
相关产品推荐

