我在尝试将hibernate搜索从v5升级到6.0时遇到了问题。我以前曾让它工作过,但现在无论我做什么,我都会得到以下错误。
Apr 29, 2022 6:50:45 PM org.apache.catalina.core.StandardContext loadOnStartup
SEVERE: Servlet [fvap] in web application [/ROOT] threw load() exception
java.lang.NoSuchMethodError: 'java.lang.String org.hibernate.search.engine.Version.versionString()'
at org.hibernate.search.mapper.orm.bootstrap.impl.HibernateSearchIntegrator.integrate(HibernateSearchIntegrator.java:65)
at org.hibernate.internal.SessionFactoryImpl.<init>(SessionFactoryImpl.java:275)
at org.hibernate.boot.internal.SessionFactoryBuilderImpl.build(SessionFactoryBuilderImpl.java:462)
at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:708)
at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:724)这是我的pom.xml中的相关进口商品。我看到版本在那里,但我认为这是一个冲突,在某些地方
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<surefire.skipTests>false</surefire.skipTests>
<lucene.version>8.7.0</lucene.version>
<hibernate.version>5.4.0.Final</hibernate.version>
<hibernate.orm.version>5.4.0.Final</hibernate.orm.version>
<hibernate.annotations.version>5.1.2.Final</hibernate.annotations.version>
<hibernate-search.version>6.0.9.Final</hibernate-search.version> <!-- Hibernate -->
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
<version>${hibernate.version}</version>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-search-orm</artifactId>
<version>${hibernate.orm.version}</version>
</dependency>
<dependency>
<groupId>org.hibernate.common</groupId>
<artifactId>hibernate-commons-annotations</artifactId>
<version>${hibernate.annotations.version}</version>
</dependency>
<dependency>
<groupId>org.hibernate.search</groupId>
<artifactId>hibernate-search-mapper-orm</artifactId>
<version>${hibernate-search.version}</version>
</dependency>
<dependency>
<groupId>org.hibernate.search</groupId>
<artifactId>hibernate-search-backend-lucene</artifactId>
<version>${hibernate-search.version}</version>
</dependency>
<dependency>
<groupId>org.hibernate.search</groupId>
<artifactId>hibernate-search-v5migrationhelper-orm</artifactId>
<version>${hibernate-search.version}</version>
</dependency>
<!-- Lucene -->
<dependency>
<groupId>org.apache.lucene</groupId>
<artifactId>lucene-core</artifactId>
<version>${lucene.version}</version>
</dependency>
<!-- <dependency> <groupId>org.apache.lucene</groupId> <artifactId>lucene-analyzers-common</artifactId> <version>${lucene.version}</version> </dependency> -->
<dependency>
<groupId>org.apache.lucene</groupId>
<artifactId>lucene-highlighter</artifactId>
<version>${lucene.version}</version>
</dependency>
<dependency>
<groupId>org.apache.lucene</groupId>
<artifactId>lucene-queryparser</artifactId>
<version>${lucene.version}</version>
</dependency>发布于 2022-05-02 06:48:31
大多数情况下,如果您得到一个NoSuchMethodError,原因是您的类路径中有一个带有错误版本的JAR。
在这里,我认为您正在导入一个不是hibernate-search-engine的版本的6.0.9.Final。
原因是您对Hibernate搜索5和Hibernate搜索6的双重依赖:
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-search-orm</artifactId>
<version>${hibernate.orm.version}</version> <!-- 5.4.0.Final -->
</dependency>
<!-- .... -->
<dependency>
<groupId>org.hibernate.search</groupId>
<artifactId>hibernate-search-mapper-orm</artifactId>
<version>${hibernate-search.version}</version> <!-- 6.0.9.Final -->
</dependency>最后,类路径中有两个org.hibernate.search.engine.Version副本,在这里,Hibernate搜索6似乎从Hibernate Search 5访问了Version类的副本,这显然是行不通的。
不管怎样..。不要在同一个应用程序中同时使用Hibernate搜索5和Hibernate搜索6。将其从POM中删除:
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-search-orm</artifactId>
<version>${hibernate.orm.version}</version>
</dependency>发布于 2022-05-09 18:22:30
感谢@yrodiere引导我走向正确的方向。实际问题是我的maven编译器插件和我正在使用的hibernate版本。
我将源和目标从11更改为1.8
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.1</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
<useIncrementalCompilation>true</useIncrementalCompilation>
</configuration>
</plugin>并将hibernate版本更改为5.6.6。
<hibernate.version>5.6.6.Final</hibernate.version>并从org.hibernate.orm恢复到org.hibernate
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
<version>${hibernate.version}</version>
</dependency>https://stackoverflow.com/questions/72064421
复制相似问题