web-dev-qa-db-ja.com

コマンドラインでliquibaseを実行できない

Liquibaseを使用したいのですが、コマンドラインで実行したい場合、次のようになります。

PS C:\Users\Ferid\Downloads\liquibase-3.6.0-bin> .\liquibase
Error: A JNI error has occurred, please check your installation and try again
Exception in thread "main" Java.lang.NoClassDefFoundError: ch/qos/logback/core/filter/Filter
    at Java.lang.Class.getDeclaredMethods0(Native Method)
    at Java.lang.Class.privateGetDeclaredMethods(Unknown Source)
    at Java.lang.Class.privateGetMethodRecursive(Unknown Source)
    at Java.lang.Class.getMethod0(Unknown Source)
    at Java.lang.Class.getMethod(Unknown Source)
    at Sun.launcher.LauncherHelper.validateMainClass(Unknown Source)
    at Sun.launcher.LauncherHelper.checkAndLoadMain(Unknown Source)
 Caused by: Java.lang.ClassNotFoundException: ch.qos.logback.core.filter.Filter
    at Java.net.URLClassLoader.findClass(Unknown Source)
    at Java.lang.ClassLoader.loadClass(Unknown Source)
    at Sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
    at Java.lang.ClassLoader.loadClass(Unknown Source)
    ... 7 more

Liquibase-3.6.1を試しましたが、今はliquibase-3.6.0を試しました

13
Mad Scientist

必要なライブラリの1つがライブラリフォルダにありません。

別のユーザーが同じ問題を抱えている場合は、以下のバグレポートのリンクをご覧ください。

Libフォルダに3.6.1にはまだslf4j-api-1.7.25が欠落しているように見えますが、cli経由でliquibaseを呼び出すエラーが表示されます。

次の3つのオプションがあります。

  1. 自分でライブラリを取得します [here]
  2. パッチが適用されたバージョンを待ちます(自分で修正を送信することもできます)。
  3. 古いバージョンに戻す(3.5.5動作するはずです)

バグレポートについてはこちらをご覧ください: https://liquibase.jira.com/browse/CORE-3201

22
sorifiend

このライブラリをクラスパスに追加する必要があります。

私の場合、Spring Boot liquibase統合を使用しているので、ここに私のbuild.gradle liquibaseの構成

buildscript {
    dependencies {
        classpath 'org.postgresql:postgresql:9.4.1211.jre7'
        classpath 'org.liquibase:liquibase-core:3.6.3'
        classpath "org.liquibase:liquibase-gradle-plugin:2.0.1"
    }
}

plugins {
    id 'org.springframework.boot' version '2.1.3.RELEASE'
    id 'Java'
    id "org.liquibase.gradle" version "2.0.1"
}


dependencies {
    liquibaseRuntime 'org.postgresql:postgresql:9.4.1211.jre7'
    liquibaseRuntime 'org.liquibase:liquibase-core:3.6.3'
    liquibaseRuntime 'org.liquibase:liquibase-groovy-dsl:2.0.1'
    liquibaseRuntime 'ch.qos.logback:logback-core:1.2.3'
    liquibaseRuntime 'ch.qos.logback:logback-classic:1.2.3'
}

def changeLog = "$projectDir/src/main/db/changelog.xml"
liquibase {
    activities {
        main {
            changeLogFile changeLog
            url 'jdbc:postgresql://localhost:5431/postgres'
            username 'postgres'
            password 'postgres'
        }
    }
}

liquibase-gradle-plugin からの抜粋です

1
Alan Hernandez