Mongock 失败:NoClassDefFoundError org/springframework/data/mongodb/MongoDatabaseFactory

Mongock failed: NoClassDefFoundError org/springframework/data/mongodb/MongoDatabaseFactory

我在 spring 启动应用程序中使用以下 pom:

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.2.13.RELEASE</version>
    <relativePath /><!-- resolve parent from repository, refer to http://www.tomitribe.com/blog/2016/06/i-do-not-hate-apache-maven/ -->
  </parent>

<dependencies>
        <dependency>
            <groupId>com.github.cloudyrock.mongock</groupId>
            <artifactId>mongock-bom</artifactId>
            <version>4.3.8</version>
            <type>pom</type>
        </dependency>
        <dependency>
            <groupId>com.github.cloudyrock.mongock</groupId>
            <artifactId>mongock-spring-v5</artifactId>
            <version>4.3.8</version>
        </dependency>
        <dependency>
            <groupId>com.github.cloudyrock.mongock</groupId>
            <artifactId>mongodb-springdata-v3-driver</artifactId>
            <version>4.3.8</version>
        </dependency>
        <dependency>
            <groupId>org.mongodb</groupId>
            <artifactId>mongodb-driver-sync</artifactId>
            <version>4.2.2</version>
         </dependency>
         <dependency>
            <groupId>org.springframework.data</groupId>
            <artifactId>spring-data-mongodb</artifactId>
            <version>2.2.12.RELEASE</version>
</dependency>
</dependencies>

当我 运行 带有 java -jar my-app.jar 的应用程序时,出现以下错误:

NoClassDefFoundError org/springframework/data/mongodb/MongoDatabaseFactory

但是当我 运行 带有 -noverify 的应用程序时,似乎一切正常

请问有人可以帮助我吗?

这是因为版本不兼容。

如您在此 compatibility table 中所见,您使用的 Mongock 版本与 spring-data 3.x 兼容,但您使用的是 2.x .

Mongock 为 spring-data 提供了两个驱动程序,mongodb-springdata-v3-driver,spring-data 3.x 和 mongodb-springdata-v2-drver for spring-data 2.2.X

我有几个建议:

  1. 要么升级你的 spring-data 依赖到 3.x,要么使用 mongodb-springdata-v2-drver(推荐第一个)
  2. 使用依赖管理,这样你就不需要为每个依赖指定版本。你可以为 spring 和 Mongock

有了这个你应该解决你的问题 ;)