Liquibase maven插件不起作用

Posted

技术标签:

【中文标题】Liquibase maven插件不起作用【英文标题】:Liquibase maven plugin not working 【发布时间】:2017-08-15 00:52:33 【问题描述】:

我正在为 Oracle 12c 数据库使用 Liquibase maven 插件,运行更新命令时出现以下错误:

无法在项目 liquibase 上执行目标 org.liquibase:liquibase-maven-plugin:3.4.1:update(默认):设置或运行 Liquibase 时出错:liquibase.exception.DatabaseException: java.sql.SQLException: ORA- 28040: 没有匹配的身份验证协议

我看到有关此问题的相关堆栈溢出帖子,其中建议对 sqlnet.ora 文件进行更改,但以下命令使用完全相同的更改日志通过命令行完美运行:

java -jar ~/.m2/repository/org/liquibase/liquibase-core/3.5.3/liquibase-core-3.5.3.jar --driver=oracle.jdbc.OracleDriver --classpath=/Users/ nsalvi/Downloads/ojdbc6.jar --url="fake url" --username="fake username" --password="fake password" --changeLogFile=/Users/nsalvi/Downloads/liquibase-example-master-2/ src/main/resources/db/dbChangelog.xml 更新

上面我引用了我本地的驱动程序类路径。

我的 pom sn-p 如下所示:

    <plugin>
        <groupId>org.liquibase</groupId>
        <artifactId>liquibase-maven-plugin</artifactId>
        <version>$liquibase.version</version>
        <configuration>
            <propertyFileWillOverride>true</propertyFileWillOverride>
            <propertyFile>src/main/resources/liquibase.properties</propertyFile>
        </configuration>
        <executions>
            <execution>
                <phase>process-resources</phase>
                <goals>
                     <goal>update</goal>
                </goals>
            </execution>
         </executions>
         <dependencies>
            <dependency>
                <groupId>com.oracle</groupId>
                <artifactId>ojdbc6</artifactId>
                <version>$oracle.version</version>
            </dependency>
         </dependencies>
    </plugin>

当我运行 maven install 时,我得到了非身份验证协议错误。我的数据库变更日志如下:

liquibase.properties:

contexts: local 
changeLogFile: db/dbChangelog.xml
driver: oracle.jdbc.OracleDriver
url: fake url
username: fake username
password: fake password
verbose: true 
dropFirst: false 

dbChangelog.xml:

    <databaseChangeLog
  xmlns="http://www.liquibase.org/xml/ns/dbchangelog/1.8"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog/1.8
         http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-1.8.xsd">
    <preConditions>
        <dbms type="oracle" />
        <runningAs username="fake" />
    </preConditions>

    <changeSet id="1" author="nishant">
        <preConditions onFail="WARN">
            <sqlCheck expectedResult="9">select count(*) from CA_PROJECT_T</sqlCheck>
        </preConditions>
        <comment>Comments should go after preCondition. If they are before then liquibase usually gives error.</comment>
    </changeSet>
</databaseChangeLog>

有什么我想念的吗? P.S.-当有问题的数据库是 mysql 而不是 oracle 时,maven 插件工作得很好,我不认为在 sqlnet.ora 文件中进行更改是这里的问题,因为从命令行运行时查询工作得很好。

提前致谢!

【问题讨论】:

【参考方案1】:

您可以使用以下阶段之一(取自 maven 网站): validate - 验证项目是否正确,所有必要的信息都可用

compile - 编译项目的源代码 test - 使用合适的单元测试框架测试编译的源代码。这些测试不应要求将代码打包或 部署 打包 - 获取已编译的代码并将其打包成可分发的格式,例如 JAR。 验证 - 对集成测试的结果进行任何检查,以确保满足质量标准 install - 将包安装到本地存储库中,用作本地其他项目的依赖项 部署 - 在构建环境中完成,将最终包复制到远程存储库,以便与其他开发人员和项目共享。

【讨论】:

以上是关于Liquibase maven插件不起作用的主要内容,如果未能解决你的问题,请参考以下文章

使用 Spring-Boot 启动时的 Liquibase 迁移不起作用

生成 forIndexName 的 Liquibase 差异在 h2 上不起作用

Liquibase / Spring Boot / Postgres - 模式名称不起作用

Spring AOP + AspectJ maven 插件 - 内部方法调用不起作用

Swagger Codegen Maven插件,带有路径变量和请求参数,OpenApi产生不起作用的代码

Maven Jacoco 配置 - 从报告中排除类/包不起作用