我有以下项目结构
bin
start.sh
db
liquibase_scripts
...
schema.json
main
java
...
test
resources
liquibase_scripts
...
schema.json
然后我构建了我的项目,将liquibase脚本添加到分布式文件夹db中。在单元测试中,我使用H2数据库,并希望从db/liquibase加载模式。我创建了bean
@Bean
public SpringLiquibase springLiquibase() {
SpringLiquibase springLiquibase = new SpringLiquibase();
springLiquibase.setDataSource(dataSource());
springLiquibase.setChangeLog("classpath:/liquibase/sam.json");
return springLiquibase;
}
问题是方法setChangeLog查看测试文件夹中的资源文件夹。因此,为了解决该问题,我将所有liquibase脚本复制到测试/资源目录。但这是不好的,因为现在我在不同的文件夹中有2个脚本副本。
是否有一种方法可以强制springLiquibase.setChangeLog在任何文件夹中查找脚本,而不仅仅是在test/resources中?
1条答案
按热度按时间bwntbbo31#
在Maven构建配置中,您可以定义
testResources
,它可以是目录和文件。通过这样的配置,Maven将文件复制到
target/test-classes
目录中。由于这样,这些文件可以在代码中用作测试资源,但在项目文件中没有重复。我在我的一个项目中使用了这样的配置(Liquibase + testResources)。为了更好地重现您的问题,我创建了a separate branch,您可以在其中找到上面描述的配置-请参见:this commit diff。变更后所有测试均通过。