从 java8 升级到 java17 得到 javassist enhacment failed 错误

问题描述 投票:0回答:0

将 Java 版本从 8 更新到 17 后,我开始在日志中看到此错误。 我的 gradle 依赖:

    implementation(group: 'org.hibernate', name: 'hibernate-core', version: '3.6.10.Final')
    implementation(group: 'org.hibernate', name: 'hibernate-c3p0', version: '3.6.10.Final')
    runtimeOnly(group: 'org.javassist', name: 'javassist', version: '3.17.1-GA')

下面是错误日志

 INFO  main db.HibernateUtils  [] Building hibernate session factory...
    ERROR main pojo.BasicLazyInitializer  [] Javassist Enhancement failed: com.class.someclass
    ERROR main pojo.BasicLazyInitializer  [] java.lang.reflect.InaccessibleObjectException: Unable to make protected final java.lang.Class java.lang.ClassLoader.defineClass(java.lang.String,byte[],int,int,java.security.ProtectionDomain) throws java.lang.ClassFormatError accessible: module java.base does not "opens java.lang" to unnamed module @3e07d849
    ERROR main pojo.BasicLazyInitializer  []   at java.base/java.lang.reflect.AccessibleObject.checkCanSetAccessible(AccessibleObject.java:354)
    ERROR main pojo.BasicLazyInitializer  []   at java.base/java.lang.reflect.AccessibleObject.checkCanSetAccessible(AccessibleObject.java:297)
    ERROR main pojo.BasicLazyInitializer  []   at java.base/java.lang.reflect.Method.checkCanSetAccessible(Method.java:199)
    ERROR main pojo.BasicLazyInitializer  []   at java.base/java.lang.reflect.Method.setAccessible(Method.java:193)
    ERROR main pojo.BasicLazyInitializer  []   at javassist.util.proxy.SecurityActions.setAccessible(SecurityActions.java:102)
    ERROR main pojo.BasicLazyInitializer  []   at javassist.util.proxy.FactoryHelper.toClass2(FactoryHelper.java:180)
    ERROR main pojo.BasicLazyInitializer  []   at javassist.util.proxy.FactoryHelper.toClass(FactoryHelper.java:163)
    ERROR main pojo.BasicLazyInitializer  []   at javassist.util.proxy.ProxyFactory.createClass3(ProxyFactory.java:501)
    ERROR main pojo.BasicLazyInitializer  []   at javassist.util.proxy.ProxyFactory.createClass2(ProxyFactory.java:486)
    ERROR main pojo.BasicLazyInitializer  []   at javassist.util.proxy.ProxyFactory.createClass1(ProxyFactory.java:422)
    ERROR main pojo.BasicLazyInitializer  []   at javassist.util.proxy.ProxyFactory.createClass(ProxyFactory.java:394)
    ERROR main pojo.BasicLazyInitializer  []   at org.hibernate.proxy.pojo.javassist.JavassistLazyInitializer.getProxyFactory(JavassistLazyInitializer.java:162)
    ERROR main pojo.BasicLazyInitializer  []   at org.hibernate.proxy.pojo.javassist.JavassistProxyFactory.postInstantiate(JavassistProxyFactory.java:65)
    ERROR main pojo.BasicLazyInitializer  []   at org.hibernate.tuple.entity.PojoEntityTuplizer.buildProxyFactory(PojoEntityTuplizer.java:185)
    ERROR main pojo.BasicLazyInitializer  []   at org.hibernate.tuple.entity.AbstractEntityTuplizer.<init>(AbstractEntityTuplizer.java:167)
    ERROR main pojo.BasicLazyInitializer  []   at org.hibernate.tuple.entity.PojoEntityTuplizer.<init>(PojoEntityTuplizer.java:77)
    ERROR main pojo.BasicLazyInitializer  []   at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    ERROR main pojo.BasicLazyInitializer  []   at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:77)
    ERROR main pojo.BasicLazyInitializer  []   at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
    ERROR main pojo.BasicLazyInitializer  []   at java.base/java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:499)
    ERROR main pojo.BasicLazyInitializer  []   at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:480)
    ERROR main pojo.BasicLazyInitializer  []   at org.hibernate.tuple.entity.EntityTuplizerFactory.constructTuplizer(EntityTuplizerFactory.java:105)
    ERROR main pojo.BasicLazyInitializer  []   at org.hibernate.tuple.entity.EntityTuplizerFactory.constructDefaultTuplizer(EntityTuplizerFactory.java:133)
    ERROR main pojo.BasicLazyInitializer  []   at org.hibernate.tuple.entity.EntityEntityModeToTuplizerMapping.<init>(EntityEntityModeToTuplizerMapping.java:80)
    ERROR main pojo.BasicLazyInitializer  []   at org.hibernate.tuple.entity.EntityMetamodel.<init>(EntityMetamodel.java:322)
    ERROR main pojo.BasicLazyInitializer  []   at org.hibernate.persister.entity.AbstractEntityPersister.<init>(AbstractEntityPersister.java:485)
    ERROR main pojo.BasicLazyInitializer  []   at org.hibernate.persister.entity.SingleTableEntityPersister.<init>(SingleTableEntityPersister.java:133)
    ERROR main pojo.BasicLazyInitializer  []   at org.hibernate.persister.PersisterFactory.createClassPersister(PersisterFactory.java:84)
    ERROR main pojo.BasicLazyInitializer  []   at org.hibernate.impl.SessionFactoryImpl.<init>(SessionFactoryImpl.java:286)
    ERROR main pojo.BasicLazyInitializer  []   at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1872)
    ERROR main pojo.BasicLazyInitializer  []   db.HibernateUtils.createSessionFactory(HibernateUtils.java:37)
    ERROR main pojo.BasicLazyInitializer  []   db.HibernateUtils.createSessionFactory(HibernateUtils.java:30)
    ERROR main pojo.BasicLazyInitializer  []   Loader.start(Loader.java:124)
    ERROR main pojo.BasicLazyInitializer  []   Bootstrap.main(Bootstrap.java:37)
    WARN  main entity.PojoEntityTuplizer  [] could not create proxy factory for:com.class.someclass
    WARN  main entity.PojoEntityTuplizer  [] org.hibernate.HibernateException: Javassist Enhancement failed: com.class.someclass
    WARN  main entity.PojoEntityTuplizer  []   at org.hibernate.proxy.pojo.javassist.JavassistLazyInitializer.getProxyFactory(JavassistLazyInitializer.java:169)
    WARN  main entity.PojoEntityTuplizer  []   at org.hibernate.proxy.pojo.javassist.JavassistProxyFactory.postInstantiate(JavassistProxyFactory.java:65)
    WARN  main entity.PojoEntityTuplizer  []   at org.hibernate.tuple.entity.PojoEntityTuplizer.buildProxyFactory(PojoEntityTuplizer.java:185)
    WARN  main entity.PojoEntityTuplizer  []   at org.hibernate.tuple.entity.AbstractEntityTuplizer.<init>(AbstractEntityTuplizer.java:167)
    WARN  main entity.PojoEntityTuplizer  []   at org.hibernate.tuple.entity.PojoEntityTuplizer.<init>(PojoEntityTuplizer.java:77)
    WARN  main entity.PojoEntityTuplizer  []   at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    WARN  main entity.PojoEntityTuplizer  []   at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:77)
    WARN  main entity.PojoEntityTuplizer  []   at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
    WARN  main entity.PojoEntityTuplizer  []   at java.base/java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:499)
    WARN  main entity.PojoEntityTuplizer  []   at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:480)
    WARN  main entity.PojoEntityTuplizer  []   at org.hibernate.tuple.entity.EntityTuplizerFactory.constructTuplizer(EntityTuplizerFactory.java:105)
    WARN  main entity.PojoEntityTuplizer  []   at org.hibernate.tuple.entity.EntityTuplizerFactory.constructDefaultTuplizer(EntityTuplizerFactory.java:133)
    WARN  main entity.PojoEntityTuplizer  []   at org.hibernate.tuple.entity.EntityEntityModeToTuplizerMapping.<init>(EntityEntityModeToTuplizerMapping.java:80)
    WARN  main entity.PojoEntityTuplizer  []   at org.hibernate.tuple.entity.EntityMetamodel.<init>(EntityMetamodel.java:322)
    WARN  main entity.PojoEntityTuplizer  []   at org.hibernate.persister.entity.AbstractEntityPersister.<init>(AbstractEntityPersister.java:485)
    WARN  main entity.PojoEntityTuplizer  []   at org.hibernate.persister.entity.SingleTableEntityPersister.<init>(SingleTableEntityPersister.java:133)
    WARN  main entity.PojoEntityTuplizer  []   at org.hibernate.persister.PersisterFactory.createClassPersister(PersisterFactory.java:84)
    WARN  main entity.PojoEntityTuplizer  []   at org.hibernate.impl.SessionFactoryImpl.<init>(SessionFactoryImpl.java:286)
    WARN  main entity.PojoEntityTuplizer  []   at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1872)
    WARN  main entity.PojoEntityTuplizer  []   db.HibernateUtils.createSessionFactory(HibernateUtils.java:37)
    WARN  main entity.PojoEntityTuplizer  []   db.HibernateUtils.createSessionFactory(HibernateUtils.java:30)
    WARN  main entity.PojoEntityTuplizer  []   Loader.start(Loader.java:124)
    WARN  main entity.PojoEntityTuplizer  []   Bootstrap.main(Bootstrap.java:37)
    WARN  main entity.PojoEntityTuplizer  [] Caused by: java.lang.reflect.InaccessibleObjectException: Unable to make protected final java.lang.Class java.lang.ClassLoader.defineClass(java.lang.String,byte[],int,int,java.security.ProtectionDomain) throws java.lang.ClassFormatError accessible: module java.base does not "opens java.lang" to unnamed module @3e07d849
    WARN  main entity.PojoEntityTuplizer  []   at java.base/java.lang.reflect.AccessibleObject.checkCanSetAccessible(AccessibleObject.java:354)
    WARN  main entity.PojoEntityTuplizer  []   at java.base/java.lang.reflect.AccessibleObject.checkCanSetAccessible(AccessibleObject.java:297)
    WARN  main entity.PojoEntityTuplizer  []   at java.base/java.lang.reflect.Method.checkCanSetAccessible(Method.java:199)
    WARN  main entity.PojoEntityTuplizer  []   at java.base/java.lang.reflect.Method.setAccessible(Method.java:193)
    WARN  main entity.PojoEntityTuplizer  []   at javassist.util.proxy.SecurityActions.setAccessible(SecurityActions.java:102)
    WARN  main entity.PojoEntityTuplizer  []   at javassist.util.proxy.FactoryHelper.toClass2(FactoryHelper.java:180)
    WARN  main entity.PojoEntityTuplizer  []   at javassist.util.proxy.FactoryHelper.toClass(FactoryHelper.java:163)
    WARN  main entity.PojoEntityTuplizer  []   at javassist.util.proxy.ProxyFactory.createClass3(ProxyFactory.java:501)
    WARN  main entity.PojoEntityTuplizer  []   at javassist.util.proxy.ProxyFactory.createClass2(ProxyFactory.java:486)
    WARN  main entity.PojoEntityTuplizer  []   at javassist.util.proxy.ProxyFactory.createClass1(ProxyFactory.java:422)
    WARN  main entity.PojoEntityTuplizer  []   at javassist.util.proxy.ProxyFactory.createClass(ProxyFactory.java:394)
    WARN  main entity.PojoEntityTuplizer  []   at org.hibernate.proxy.pojo.javassist.JavassistLazyInitializer.getProxyFactory(JavassistLazyInitializer.java:162)
    WARN  main entity.PojoEntityTuplizer  []   ... 22 more

我尝试在我的 gradle 文件中添加 jvmargs

test {
    jvmArgs=[
             '--add-opens=java.base/java.lang.module=ALL-UNNAMED'
            ]
}

但仍然收到相同的错误日志。 我有更新 hibernate 或 javassist 依赖项吗?那么我想代码更改也将是必需的。 有人可以建议这里需要做什么吗?

hibernate build.gradle jvm-arguments javassist java-17
© www.soinside.com 2019 - 2024. All rights reserved.