Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 无法使用命令行运行liquibase_Java_Database_Migration_Liquibase - Fatal编程技术网

Java 无法使用命令行运行liquibase

Java 无法使用命令行运行liquibase,java,database,migration,liquibase,Java,Database,Migration,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/logb

我想使用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

库文件夹中缺少一个必需的库

请参阅下面的bug report链接,其中有其他用户存在相同问题

lib文件夹中似乎仍缺少3.6.1 slf4j-api-1.7.25 我仍然收到通过cli调用liquibase时出错的消息

您有三种选择:

  • 你自己去图书馆
  • 等待修补好的补丁 版本(可能自己提交修复)
  • 恢复到旧版本(3.5.5应该可以使用)
  • 有关错误报告,请参见此处:

    必须将此库添加到类路径:

    在我的例子中,我使用的是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'
            }
        }
    }
    

    这是我在版本
    3.6.2
    中偶然发现的相同问题的摘录。问题是Liquibase找不到所需的类(
    ch.qos.logback.core.filter.filter
    只是其中之一,但还有其他类)。没有通用的方法,但高级思想是找到所需类所在的jar,并将它们提供给
    -cp
    命令行参数。看起来有点难看,但这就是最终成功的原因:

    #!/bin/bash
    
    M2_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
    
    请注意,我在Linux上使用
    ,而
    。根据您的特定JAR位置调整命令

    或者,您可以将依赖项放入目录,并在
    -cp
    之后使用通配符指定它:

       $ java -cp "/home/raiks/liquibase-deps/*" liquibase.integration.commandline.Main --changeLogFile=~/changelog-master.xml update
    

    即使在3.6.2版本中,Bug仍然是开放的