【发布时间】:2019-04-19 23:24:48
【问题描述】:
我想将我的新项目升级到 Spring Boot 版本 2.1.0,但我受限于 Oracle 11 数据库,Flyway 4.2.0 库支持该数据库。一切都在 Spring Boot 2.0.5 版本上正常运行,但是当移动到 2.1.0 版本时,我收到此错误:
java.lang.NoClassDefFoundError:
org/flywaydb/core/api/configuration/FluentConfiguration
POM配置如下:
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.0.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
<ojdbc6.version>11.2.0.1</ojdbc6.version>
</properties>
<dependencies>
<dependency>
<groupId>com.oracle.jdbc</groupId>
<artifactId>ojdbc6</artifactId>
<version>${ojdbc6.version}</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>org.flywaydb</groupId>
<artifactId>flyway-core</artifactId>
<version>4.2.0</version>
</dependency>
</dependencies>
更新
我可以通过@Configuration 解决问题(或者当然添加到主类),但问题是它的错误还是功能?在 2.1.0 版本之前,一切都是通过自动配置完成的,并且开箱即用。
@Bean(initMethod = "migrate")
Flyway flyway() {
Flyway flyway = new Flyway();
flyway.setBaselineOnMigrate(true);
flyway.setDataSource("jdbc:oracle:thin:@localhost:1521:xe", "USER", "PASSWORD1");
return flyway;
}
【问题讨论】:
-
这根本不是错误。 Spring Boot 依赖于 Flyway 5.2.1,它的 API 与您使用的旧版本不同。
-
是的,我注意到了,但不能以某种方式将它排除在 pom.xml 中以支持旧版本吗?我可以找到正确的依赖项,但它正在寻找这个 FluentConfiguration 类。
-
当然可以。但这不会改变配置 Flyway 的 Spring Boot 代码,它使用仅存在于最新版本 Flyway 中的新类。打个比方,如果你用 Java 8 编译使用 java.util.stream 的类,然后尝试在 Java 7 上运行该代码,那是行不通的,因为 Java 7 中不存在 java.util.stream .
-
您是如何测试您的应用的?
标签: java spring-boot flyway