根据所选的配置文件执行maven任务

时间:2014-03-19 10:51:50

标签: java sql maven jdbc pom.xml

我目前正在开发我的第一个基于JAX-RS的REST服务,为了根据我正在执行服务的环境访问不同的数据库,我将配置文件添加到pom.xml。基于当前选择的配置文件,我能够创建配置文件,这使我可以建立与本地数据库的连接。

但是,我还使用此信息创建数据库和表,并使用dbunit将一些测试数据加载到其中。问题是,为所有配置文件创建和删除了数据库,但我只是想为测试配置文件重新创建数据库。如果我使用生产或开发配置文件,那么只要对数据库表进行了结构更改,就应该更改数据库。

所以我的问题是我如何根据当前选择的配置文件执行插件操作。因此,请考虑以下示例。如果我使用test设置个人资料maven clean install -P test,如何更改执行以便执行?

<plugin>
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>sql-maven-plugin</artifactId>
    <version>${sql.maven.plugin.version}</version>

    <!-- Specify the dependent jdbc driver -->
    <dependencies>
        <dependency>
            <groupId>postgresql</groupId>
            <artifactId>postgresql</artifactId>
            <version>${postgresql.jdbc.version}</version>
        </dependency>
    </dependencies>

    <!-- Common configuration shared by all executions -->
    <configuration>
        <driver>${database.jdbc.driverClass}</driver>
        <url>${database.jdbc.connectionURL}</url>
        <!-- You can comment out username/password configurations and have maven 
            to look them up in your settings.xml using ${settingsKey} -->
        <username>${database.jdbc.username}</username>
        <password>${database.jdbc.password}</password>
        <settingsKey>postgres-db</settingsKey>
        <!-- All executions are ignored if -Dmaven.test.skip=true -->
        <skip>${maven.test.skip}</skip>
    </configuration>

    <executions>
        <execution>
            <id>drop-db-before-test-if-any</id>
            <phase>process-test-resources</phase>
            <goals>
                <goal>execute</goal>
            </goals>
            <configuration>
                <!-- need another database to drop the targeted one -->
                <url>jdbc:postgresql://localhost:5432</url>
                <autocommit>true</autocommit>
                <sqlCommand>DROP DATABASE ${database.jdbc.dbName};</sqlCommand>
                <!-- ignore error when database is not available -->
                <onError>continue</onError>
            </configuration>
        </execution>

        <execution>
            <id>create-db</id>
            <phase>process-test-resources</phase>
            <goals>
                <goal>execute</goal>
            </goals>
            <configuration>
                <url>jdbc:postgresql://localhost:5432</url>
                <!-- no transaction -->
                <autocommit>true</autocommit>
                <sqlCommand>CREATE DATABASE ${database.jdbc.dbName};</sqlCommand>
            </configuration>
        </execution>

        <execution>
            <id>create-tables</id>
            <phase>process-test-resources</phase>
            <goals>
                <goal>execute</goal>
            </goals>
            <configuration>
                <autocommit>true</autocommit>
                <delimiterType>row</delimiterType>
                <srcFiles>
                    <srcFile>src/main/sql/spozz-schema.sql</srcFile>
                </srcFiles>
            </configuration>
        </execution>
    </executions>
</plugin>

1 个答案:

答案 0 :(得分:0)

由于pluginelement allowed in a Profile将您的插件放入个人资料中,并在相应的个人资料中声明您想要的executions