【问题标题】:Liquibase : Cannot find base path 'src/main/resources/com/example/database/changelog/v000/master.xml'Liquibase:找不到基本路径'src/main/resources/com/example/database/changelog/v000/master.xml'
【发布时间】:2019-02-09 14:04:47
【问题描述】:

我正在尝试使用 maven 插件构建一个 liquibase 项目,但在使用 relativeFile 路径时遇到了一些问题,我试图接近为 liquibase maven 项目定义的最佳实践。当我运行 mvn liquibase:update 时,我得到“无法找到基本路径”。

src/
`-- main
    |-- java
    `-- resources
        |-- changelog-1.0.0.xml
        |-- changelog-1.1.0.xml
        |-- changelog-install.xml
        |-- com
        |   `-- obolus
        |       `-- database
        |           `-- changelog
        |               |-- v000
        |               |   |-- cst
        |               |   |   |-- entity_extra_data.xml
        |               |   |   `-- entity.xml
        |               |   |-- master.xml
        |               |   `-- tab
        |               |       |-- company.xml
        |               |       |-- entity_extra_data.xml
        |               |       |-- entity.xml
        |               |       `-- anothertable.xml
        |               `-- v001
        |                   |-- master.xml
        |                   `-- tab
        |                       `-- sample.xml
        |-- lib
        |   |-- ojdbc6-11.2.0.3.jar
        `-- liquibase.properties

我的 pom.xml 的内容

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.obolus</groupId>
    <artifactId>database</artifactId>
    <version>1.0.0-SNAPSHOT</version>
    <packaging>jar</packaging>
    <build>
        <plugins>
            <plugin>
                <groupId>org.liquibase</groupId>
                <artifactId>liquibase-maven-plugin</artifactId>
                <version>${liquibase.maven.plugin}</version>
                <configuration>
                    <changeLogFile>src/main/resources/changelog-install.xml</changeLogFile>
                    <propertyFile>src/main/resources/liquibase.properties</propertyFile>
                    <logging>${logLevel}</logging>
                </configuration>
                <executions>
                    <execution>
                        <goals>
                            <goal>status</goal>
                        </goals>
                    </execution>
                </executions>            
            </plugin>
        </plugins>
        <!-- resource filtering -->
        <resources>
            <resource>
                <directory>src/main/resources</directory>
                <filtering>true</filtering>
            </resource>
        </resources>
    </build>
    <dependencies>
        <dependency>
            <groupId>com.oracle</groupId>
            <artifactId>ojdbc6</artifactId>
            <version>${ojdbc.driver.version}</version>
        </dependency>
    </dependencies>
    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <maven.compiler.source>1.8</maven.compiler.source>
        <maven.compiler.target>1.8</maven.compiler.target>
        <ojdbc.driver.version>11.2.0.3</ojdbc.driver.version>
        <liquibase.maven.plugin>3.3.2</liquibase.maven.plugin>
    <logLevel>severe</logLevel>
    </properties>
</project>

当我运行 liquibase:update 时,出现以下错误

DEBUG 4/29/15 4:02 PM: liquibase: Using file opener for includeAll: liquibase.resource.CompositeResourceAccessor(org.liquibase.maven.plugins.MavenResourceAccessor(file:/home/www-data/workspace/database/target/classes/,file:/home/www-data/workspace/database/target/test-classes/,file:/home/www-data/.m2/repository/com/oracle/ojdbc6/11.2.0.3/ojdbc6-11.2.0.3.jar),liquibase.resource.FileSystemResourceAccessor(/home/www-data/workspace/database))
DEBUG 4/29/15 4:02 PM: liquibase: Release Database Lock
DEBUG 4/29/15 4:02 PM: liquibase: Executing UPDATE database command: UPDATE DATABASECHANGELOGLOCK SET LOCKED = 0, LOCKEDBY = NULL, LOCKGRANTED = NULL WHERE ID = 1
INFO 4/29/15 4:02 PM: liquibase: Successfully released change log lock
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 6.111 s
[INFO] Finished at: 2015-04-29T16:02:15+10:00
[INFO] Final Memory: 10M/164M
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal org.liquibase:liquibase-maven-plugin:3.3.2:update (default-cli) on project database: Error setting up or running Liquibase: liquibase.exception.SetupException: liquibase.exception.SetupException: liquibase.exception.SetupException: Cannot find base path 'src/main/resources/com/example/database/changelog/v000/master.xml' -> [Help 1]

知道我哪里错了。

【问题讨论】:

  • 您可以将日志级别设置为debug 并查看是否打印出完整的堆栈跟踪。我猜你包括来自changelog-install.xml...v000/master.xml?也许您还可以将这些文件中的相关部分添加到您的问题中。我认为 maven 是在特定文件夹中执行的(可能是 classes 文件夹。所以当前的工作目录就是那个文件夹。如果你使用 relativeToChangelogFile 路径需要相对于那个文件夹。
  • 无论如何,target/classes 也构建了相同的目录结构。
  • 在 liquibase 源中字符串 Cannot find base path 只有一次,它在 AbstractResourceAccessor. convertToPath 方法中。如果你有一个完整的堆栈跟踪,也许你可以看到它来自哪里,然后找出你的设置中的路径在哪里不起作用......
  • 如果我将所有内容更改为目标/类,它似乎不会解决同样的问题。调试 15 年 4 月 29 日下午 4:59:liquibase:v000/tab/ 的 includeAll 调试 15 年 4 月 29 日下午 4:59:liquibase:对 includeAll 使用文件打开器:liquibase.resource.CompositeResourceAccessor(org.liquibase.maven。 plugins.MavenResourceAccessor(file:/home/www-data/workspace/database/target/classes/,file:/home/www-data/workspace/database/target/test-classes/,file:/home/www-data /.m2/repository/com/oracle/ojdbc6/11.2.0.3/ojdbc6-11.2.0.3.jar),liquibase.resource.FileSystemResourceAccessor(/home/www-data/workspace/database))
  • 它来自 v000/master.xml,我再次将 v000/tab 包含为 includeAll 和 relativePathToChangeLog。

标签: database maven liquibase


【解决方案1】:

以下更改后似乎可以正常工作。

pom.xml 中的变化

<changeLogFile>target/classes/changelog-install.xml</changeLogFile
<propertyFile>target/classes/liquibase.properties</propertyFile>

com.obolus.database.changelog.v000/master.xml 中的更改

<includeAll path="com/obolus/database/changelog/v000/tab"/>
<includeAll path="com/obolus/database/changelog/v000/cst"/>

【讨论】:

    猜你喜欢
    • 2017-08-24
    • 1970-01-01
    • 1970-01-01
    • 2018-01-13
    • 2011-02-24
    • 1970-01-01
    • 1970-01-01
    • 2015-03-22
    • 2014-09-25
    相关资源
    最近更新 更多