Maven SQL插件:有条件地执行脚本

时间:2015-04-02 08:50:09

标签: java maven pom.xml sql-maven-plugin

在Java项目中,我使用SQL Maven插件来执行具有给定配置文件的SQL脚本。以下是我pom.xml的一部分:

<profile>
<id>import_oracle</id>
<build>
    <plugins>
        <plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>sql-maven-plugin</artifactId>
            <version>1.5</version>
            <dependencies>
                [oracle dependency]
            </dependencies>
            <configuration>
                [oracle conf: username, password, DB url, driver class..]
            </configuration>
            <executions>
                <execution>
                    <id>default-cli</id>
                    <goals>
                        <goal>execute</goal>
                    </goals>
                    <configuration>
                        <srcFiles>
                            <srcFile>sql/datas/V2.0.0/foo.sql</srcFile>
                            ...
                        </srcFiles>
                    </configuration>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>
</profile>

这很有效。我通过mvn sql:execute -Pimport_oracle执行它。

现在我想要做的是使用文件/文件夹名称来有条件地执行这些SQL脚本。通常,我在我的项目中有这个结构,其中文件夹的名称对应于我的项目版本:

sql/datas/V2.0.0/foo.sql
sql/datas/V2.0.0/bar.sql
sql/datas/V2.5.0/helloworld.sql
sql/datas/V3.0.0/stuff.sql

如果在我的项目的pom中我有<version>2.5.0</version>,我希望SQL Maven插件执行前3个脚本(因为它们的文件夹名称是&lt; =到我的项目版本)但是不是最后一个,因为3.0.0&gt; 2.5.0

我可以使用SQL Maven插件实现这一目标吗? doc对此我没有任何意义。 Ant的任务可以成为更好的解决方案吗?

1 个答案:

答案 0 :(得分:2)

您可以使用$ {project.version},但这只会匹配V2.5.0

但我建议使用像Flyway或Liquibase这样的数据库迁移工具