我正在从JDev 12.1.3迁移到12.2.0。现在有一些durnng编译问题,但它已通过修改类路径解决。 现在,当我进行部署时,它显示了一个例外。那是......
" java.lang.NoSuchMethodError:org.jboss.logging.Logger.debugf(Ljava / lang / String; I)V"
我正在使用以下依赖项..
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
<version>5.2.0.Final</version>
<type>jar</type>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.hibernate.common</groupId>
<artifactId>hibernate-commons-annotations</artifactId>
<version>5.0.1.Final</version>
<type>jar</type>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.hibernate.javax.persistence</groupId>
<artifactId>hibernate-jpa-2.1-api</artifactId>
<version>1.0.0.Final</version>
<type>jar</type>
<scope>provided</scope>
</dependency>
除了这些依赖关系外,我还研究了&#34; C:\ oracle_home12c \ wlserver \ modules&#34;文件夹,发现有一个&#34; org.jboss.logging.jboss-logging.jar&#34;文件。 我从&#34; jboss-logging-3.3.0.Final&#34;替换了maven repo文件。 我也查看了&#34; jboss-logging-3.3.0.Final&#34; jar文件。有一个Logger类文件,但它不包含debugf(String)方法。
异常类型;
Caused by: java.lang.NoSuchMethodError: org.jboss.logging.Logger.debugf(Ljava/lang/String;I)V
at org.hibernate.internal.NamedQueryRepository.checkNamedQueries(NamedQueryRepository.java:149)
at org.hibernate.internal.SessionFactoryImpl.checkNamedQueries(SessionFactoryImpl.java:764)
at org.hibernate.internal.SessionFactoryImpl.<init>(SessionFactoryImpl.java:495)
at org.hibernate.boot.internal.SessionFactoryBuilderImpl.build(SessionFactoryBuilderImpl.java:444)
at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:802)
at org.hibernate.jpa.HibernatePersistenceProvider.createContainerEntityManagerFactory(HibernatePersistenceProvider.java:135)
at weblogic.persistence.BasePersistenceUnitInfo.initializeEntityManagerFactory(BasePersistenceUnitInfo.java:611)
有人可以帮忙摆脱这个问题吗?
提前致谢
答案 0 :(得分:2)
如果您使用的是glassfish服务器,问题可能出在glassfish提供的lib上。此错误是由使用不兼容的版本引起的。
只需在glassfish-web.xml
目录中创建一个WEB-INF
文件即可。该文件的内容如下所示:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE glassfish-web-app PUBLIC "-//GlassFish.org//DTD GlassFish Application Server 3.1 Servlet 3.0//EN" "http://glassfish.org/dtds/glassfish-web-app_3_0-1.dtd">
<glassfish-web-app>
<class-loader delegate="false"/>
</glassfish-web-app>
这确保了glassfish不会加载它的内部库,而是加载项目中的库。
答案 1 :(得分:0)
我不知道JDev类加载是如何工作的,但也许它需要一个错误版本的jboss-logging而没有这个方法呢?尝试从模块目录中删除它。并确保您的应用程序捆绑了.war中的jboss-logging。它应该由Hibernate的依赖项引入。如果没有,请将其添加到pom.xml。