java Liquibase与多模块项目
我在项目中有两个模块(integrationTest
和main
)运行集成测试。我希望在测试之前,我的应用程序将使用liquibase启动并滚动迁移,但由于我通过集成测试模块运行应用程序,liquibase正在查找导致错误的有关此模块的主文件。因为主文件位于具有miom应用程序的模块中(main
)
我的项目结构如下所示(为了紧凑,省略了一些类):
PROJECT
└───dataMigration
│ build.gradle
│
└───src
├───main
│ ├───java
│ │ Application.java
│ │
│ └───resources
│ │ application.yml
│ │
│ └───db
│ └───changelog
│ db.changelog-master.xml
│ db.changelog-1.0.xml
│
└──integrationTest
├───java
│ IntegrationTest.java
│
└───resources
application-integration-tests.yml
如果运行集成测试,则会出现以下错误
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'org.springframework.boot.autoconfigure.liquibase.LiquibaseAutoConfiguration$LiquibaseConfiguration': Invocation of init method failed; nested exception is java.lang.IllegalStateException: Cannot find changelog location: class path resource [db/changelog/db.changelog-master.xml] (please add changelog or check your Liquibase configuration)
如果我像往常一样运行我的应用程序(从main
模块),那么一切都正常
如何使应用程序了解主文件与应用程序本身在模块中,而不是在集成测试模块中
# 1 楼答案
由于
resources
目录应该是classpath
的一部分,因此可以将主变更日志文件位置指定为:change-log: classpath:db/changelog/db.changelog-master.xml