Porównaj ceny domen i usług IT, sprzedawców z całego świata

Nie mogę rozpocząć z wiersza poleceń


Chcę użyć liquibase, ale kiedy chcę pozwolić mu działać z wiersza poleceń, zdarza się:
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

Próbowałem liquidibase-3.6.1, a teraz liquibase-3.6.0
Zaproszony:
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

W folderze biblioteki brakuje jednej z wymaganych bibliotek.
Zobacz link do raportu o błędzie poniżej, gdzie inny użytkownik miał ten sam problem.

Wygląda na to, że 3.6.1 nadal brakuje slf4j-api-1.7.25 w folderze lib
i nadal otrzymuję błąd wywoływania liquidibase przez CLI.

Masz trzy możliwości:
  • Sam weź bibliotekę [tutaj] https://www.slf4j.org/download.html .
  • Poczekaj na poprawione wersje (może sam prześlij poprawkę).
  • Przywróć starszą wersję (3.5.5 powinno działać)

Zobacz raport o błędzie tutaj:

https:// liquibase.jira.com/przegląd/CORE-3201
https://liquibase.jira.com/browse/CORE-3201
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Musisz dodać te biblioteki do swojej ścieżki klas:

W moim przypadku używam integracji Spring Boot z liquibase, więc oto mój konfigurator
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'
}
}
}

To jest fragment z

liquibase-gradle-plugin
https://github.com/liquibase/l ... lugin
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Natknąłem się na ten sam problem w
3.6.2
. Problem polega na tym, że Liquibase nie może znaleźć wymaganych klas (
ch.qos.logback.core.filter.Filter
to tylko jedna z nich, ale są inne). Nie ma jednej uniwersalnej receptury, ale ogólna idea polega na znalezieniu plików JAR wymaganych klas i przekazaniu ich do parametru wiersza poleceń
-cp
. Wygląda trochę brzydko, ale w końcu zadziałało:
#!/bin/bashM2_REPO=/home/raiks/.m2/repository
LIQUIBASE_CMDLINE='liquibase.integration.commandline.Main --changeLogFile=~/changelog-master.xml update'
# Feed all the required JARs to -cp
JAVA_CMD="java -cp $M2_REPO/org/liquibase/liquibase-core/3.6.2/liquibase-core-3.6.2.jar:$M2_REPO/org/slf4j/slf4j-api/1.7.5/slf4j-api-1.7.5.jar:$M2_REPO/ch/qos/logback/logback-core/1.2.3/logback-core-1.2.3.jar:$M2_REPO/ch/qos/logback/logback-classic/1.2.3/logback-classic-1.2.3.jar $LIQUIBASE_CMDLINE"
echo $JAVA_CMD
eval $JAVA_CMD

Zwróć uwagę, że używam
:
w systemie Linux, natomiast
;
będzie wymagany w systemie Windows. Dostosuj polecenie zgodnie z konkretną lokalizacją pliku JAR.
Alternatywnie możesz umieścić zależności w katalogu i określić je za pomocą symbolu wieloznacznego po
-cp
:
$ java -cp "/home/raiks/liquibase-deps/*" liquibase.integration.commandline.Main --changeLogFile=~/changelog-master.xml update

Aby odpowiedzieć na pytania, Zaloguj się lub Zarejestruj się