ビルド システムとして Gradle で JHipster 4.5.4 を使用しており、検証やリセットなどの Liquibase タスクを実行するための Gradle タスクを追加したいと考えています。テンプレートとして JHipster に同梱されている liquibaseDiffChangelog タスクを使用しました。このタスクは次のように定義されます。
task liquibaseDiffChangelog(dependsOn: compileJava, type: JavaExec) {
group = "liquibase"
if (OperatingSystem.current().isWindows()) {
dependsOn pathingLiquibaseJar
doFirst {
classpath = files(pathingLiquibaseJar.archivePath)
}
} else {
classpath sourceSets.main.runtimeClasspath
classpath configurations.liquibase
}
main = "liquibase.integration.commandline.Main"
args "--changeLogFile=src/main/resources/config/liquibase/changelog/" + buildTimestamp() +"_changelog.xml"
args "--referenceUrl=hibernate:spring:at.project.domain?dialect=org.hibernate.dialect.MySQL5InnoDBDialect&hibernate.physical_naming_strategy=org.springframework.boot.orm.jpa.hibernate.SpringPhysicalNamingStrategy&hibernate.implicit_naming_strategy=org.springframework.boot.orm.jpa.hibernate.SpringImplicitNamingStrategy"
args "--username=testapp_db_user"
args "--password=secret"
args "--url=jdbc:mysql://localhost:3306/testapp_db"
args "--driver=com.mysql.jdbc.Driver"
args "diffChangeLog"
}
単純にdiffChangeLogをvalidateと交換することから始めましたが、クラスパス エラーが発生します。クラスパス引数も追加し、次のようなタスク定義になりました。
task liquibaseValidate(dependsOn: compileJava, type: JavaExec) {
group = "liquibase"
if (OperatingSystem.current().isWindows()) {
dependsOn pathingLiquibaseJar
doFirst {
classpath = files(pathingLiquibaseJar.archivePath)
}
} else {
classpath sourceSets.main.runtimeClasspath
classpath configurations.liquibase
}
main = "liquibase.integration.commandline.Main"
args "--changeLogFile=./build/resources/main/config/liquibase/master.xml"
args "--referenceUrl=hibernate:spring:at.project.domain?dialect=org.hibernate.dialect.MySQL5InnoDBDialect&hibernate.physical_naming_strategy=org.springframework.boot.orm.jpa.hibernate.SpringPhysicalNamingStrategy&hibernate.implicit_naming_strategy=org.springframework.boot.orm.jpa.hibernate.SpringImplicitNamingStrategy"
args "--username=testapp_db_user"
args "--password=secret"
args "--url=jdbc:mysql://localhost:3306/testapp_db"
args "--driver=com.mysql.jdbc.Driver"
args "--classpath=./build/resources/main/config/liquibase/changelog/"
args "validate"
}
正しいファイル名が記載されているため、マスターファイルが読み取られるため、この部分は問題ありません。しかし、 master.xmlファイルで参照されている実際の変更セット ファイルのパスは認識されません。これはエラーメッセージです:
19:51:04.292 [main] ERROR liquibase - classpath:config/liquibase/changelog/00000000000000_initial_schema.xml does not exist
liquibase.exception.ChangeLogParseException: liquibase.exception.SetupException: classpath:config/liquibase/changelog/00000000000000_initial_schema.xml does not exist
at liquibase.parser.core.xml.AbstractChangeLogParser.parse(AbstractChangeLogParser.java:27)
at liquibase.Liquibase.getDatabaseChangeLog(Liquibase.java:229)
at liquibase.Liquibase.validate(Liquibase.java:1443)
at liquibase.integration.commandline.Main.doMigration(Main.java:1102)
at liquibase.integration.commandline.Main.run(Main.java:188)
at liquibase.integration.commandline.Main.main(Main.java:103)
Caused by: liquibase.exception.SetupException: classpath:config/liquibase/changelog/00000000000000_initial_schema.xml does not exist
at liquibase.changelog.DatabaseChangeLog.handleChildNode(DatabaseChangeLog.java:322)
at liquibase.changelog.DatabaseChangeLog.load(DatabaseChangeLog.java:282)
at liquibase.parser.core.xml.AbstractChangeLogParser.parse(AbstractChangeLogParser.java:25)
... 5 common frames omitted
Caused by: liquibase.exception.ChangeLogParseException: classpath:config/liquibase/changelog/00000000000000_initial_schema.xml does not exist
at liquibase.parser.core.xml.XMLChangeLogSAXParser.parseToNode(XMLChangeLogSAXParser.java:100)
at liquibase.parser.core.xml.AbstractChangeLogParser.parse(AbstractChangeLogParser.java:17)
at liquibase.changelog.DatabaseChangeLog.include(DatabaseChangeLog.java:478)
at liquibase.changelog.DatabaseChangeLog.handleChildNode(DatabaseChangeLog.java:320)
... 7 common frames omitted
クラスパスを正しく追加するにはどうすればよいですか?