java.lang.nosuchmethoderror:&#java.lang.string org.hibernate.search.engine.engine.version.version.versionstring()'

发布于 2025-01-25 05:56:20 字数 4063 浏览 3 评论 0原文

我遇到了一个问题,试图将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>

I'm having a problem trying to upgrade hibernate search from v5 to 6.0. I had it working previously but now I'm getting the following error no matter what I do.

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)

Here are the relevant imports in my pom.xml. I see that the Version is there but I think these is a conflict some where

<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>

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

躲猫猫 2025-02-01 05:56:20

在大多数情况下,如果您获得nosuchmethoderror,则原因是您的类Path中的JAR带有错误的版本。

在这里,我认为您正在导入一个版本的Hibernate-Search-engine-engine不是6.0.9.9.final

原因是您对Hibernate Search 5和Hibernate Search 6的双重依赖性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.engine.engine.version.version.version,在这里,这里似乎Hibernate Search 6访问了Hibernate Search 5的版本类的副本。显然,这是行不通的。

无论如何...在同一应用程序中不要同时使用Hibernate Search 5和Hibernate Search 6。从您的POM中删除它:


<dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-search-orm</artifactId>
            <version>${hibernate.orm.version}</version>
        </dependency>

Most of the time, if you get a NoSuchMethodError, the cause is a JAR in your classpath with the wrong version.

Here, I think you are importing a version of hibernate-search-engine that is not 6.0.9.Final.

The cause is your double dependency to both Hibernate Search 5 and Hibernate Search 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>

You end up with two copies of org.hibernate.search.engine.Version in your classpath, and here it seems Hibernate Search 6 accessed the copy of the Version class from Hibernate Search 5. Which, obviously, doesn't work.

Anyway... Don't use both Hibernate Search 5 and Hibernate Search 6 in the same application. Remove this from your POM:


<dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-search-orm</artifactId>
            <version>${hibernate.orm.version}</version>
        </dependency>
半山落雨半山空 2025-02-01 05:56:20

感谢@yrodiere带领我朝着正确的方向前进。实际问题是我的小杂货店 - 普鲁金(Maven-Compiler-Plugin)和我正在使用的冬眠版本。

我将源和目标从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>

,然后将冬眠版本更改为5.6.6. -final

<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>

Thanks to @yrodiere for leading me in the right direction. The actual issue was my maven-compiler-plugin and the version of hibernate I was using.

I changed the source and target to 1.8 from 11

<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>

And change my hibernate version to 5.6.6.Final

<hibernate.version>5.6.6.Final</hibernate.version>

and revert from org.hibernate.orm to org.hibernate

<dependency>
   <groupId>org.hibernate</groupId>
   <artifactId>hibernate-core</artifactId>
   <version>${hibernate.version}</version>
</dependency>
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文