Я пытаюсь создать простой gradle-проект, который нужно просто использовать для переноса базы данных с использованием flywayDb, используя скрипты миграции, которые хранятся в файлах JAR в другом каталоге.Этот каталог никак не связан со сборкой gradle.Он создается и заполняется с использованием другого механизма в рамках проекта.
(по крайней мере, для меня) очевидный скрипт не работал:
[...]
// flyway plugin
apply plugin: 'org.flywaydb.flyway'
// dependencies
dependencies {
compile fileTree(dir: '/workspace/WEB-INF/lib', include: '*.jar')
}
// flyway configuration
flyway {
[...]
locations = [ 'classpath:/META-INF/db' ]
}
При вызове задачи переноса с прохода все, что я получаюравно
Unable to resolve location classpath:META-INF/db
и ничего не перенесено.Если я извлекаю файлы JAR и использую местоположение filesystem
, оно работает нормально.Поэтому я предполагаю, что путь к классу, который использует этот путь, не включает в себя файлы JAR.
Это подводит меня к моему вопросу: какой путь к классу использует путь для поиска сценариев базы данных?И как я могу добавить к этому простые файлы JAR из файловой системы?
Редактировать:
Завершить build.gradle после комментария:
// add JDBC drivers (for flyway) and flyway itself to classpath
buildscript {
repositories {
maven {
url "https://plugins.gradle.org/m2/"
}
}
dependencies {
classpath group: 'gradle.plugin.com.boxfuse.client', name: 'gradle-plugin-publishing', version: '5.0.7'
classpath group: 'mysql', name: 'mysql-connector-java', version: '5.1.42'
}
}
// flyway plugin
apply plugin: 'org.flywaydb.flyway'
// configurations
configurations {
flywayClasspath
}
// dependencies
dependencies {
flywayClasspath fileTree(dir: '/workspace/WEB-INF/lib', include: '*.jar')
flywayClasspath files('/workspace/WEB-INF/classes')
}
// get needed data for connection
def dbPassword = System.getenv('MYSQL_ROOT_PASSWORD')
def dbName = System.getenv('PROJECTNAME')
// flyway configuration
flyway {
configurations = [ 'flywayClasspath' ]
url = "jdbc:mysql://localhost/${dbName}?rewriteBatchedStatements=true&useUnicode=true&characterEncoding=utf-8&useLegacyDatetimeCode=false&serverTimezone=Europe/Berlin&useSSL=false"
driver = 'com.mysql.jdbc.Driver'
user = 'root'
password = dbPassword
locations = [ "classpath:/META-INF/db/mysql" ]
table = 'schema_version'
outOfOrder = true
ignoreMissingMigrations = true
}