4

我想要的是能够从 Maven 创建/删除数据库(如果可能的话)。我找到了 maven sql 插件,但不明白如何创建数据库。不知何故,maven 说我没有 sql 命令。谁能帮我解决这个问题?

这是结果

    d:\Projects\Learn\hibernate>mvn sql:execute
[INFO] Scanning for projects...
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Building App 1.0-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[INFO]
[INFO] --- sql-maven-plugin:1.5:execute (default-cli) @ learn ---
[INFO] 0 of 0 SQL statements executed successfully
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 1.027s
[INFO] Finished at: Wed Sep 18 11:34:25 MSK 2013
[INFO] Final Memory: 8M/107M
[INFO] ------------------------------------------------------------------------

和pom:

<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>learn-hibernate</groupId>
<artifactId>learn</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>jar</packaging>

<name>App</name>

<properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <project.build.outputEncoding>UTF-8</project.build.outputEncoding>
</properties>

<dependencies>
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.11</version>
    </dependency>
    <dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-core</artifactId>
        <version>4.2.4.Final</version>
    </dependency>
    <dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-annotations</artifactId>
        <version>3.5.6-Final</version>
    </dependency>
    <dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-entitymanager</artifactId>
        <version>3.4.0.GA</version>
    </dependency>
    <dependency>
        <groupId>postgresql</groupId>
        <artifactId>postgresql</artifactId>
        <version>9.1-901.jdbc4</version>
    </dependency>
</dependencies>

<build>
    <pluginManagement>
        <plugins>
            <plugin>
                <groupId>org.codehaus.mojo</groupId>
                <artifactId>exec-maven-plugin</artifactId>
                <version>1.1</version>
                <configuration>
                    <mainClass>App.App</mainClass>
                </configuration>
            </plugin>

            <plugin>
                <groupId>org.codehaus.mojo</groupId>
                <artifactId>sql-maven-plugin</artifactId>
                <version>1.5</version>

                <dependencies>
                    <!-- specify the dependent jdbc driver here -->
                    <dependency>
                        <groupId>postgresql</groupId>
                        <artifactId>postgresql</artifactId>
                        <version>9.1-901.jdbc4</version>
                    </dependency>
                </dependencies>

                <configuration>
                    <driver>org.postgresql.Driver</driver>
                    <url>jdbc:postgresql://localhost:5432</url>
                    <username>postgres</username>
                    <password>123456</password>
                </configuration>

                <executions>
                    <execution>
                        <id>default</id>
                        <phase>compile</phase>
                        <goals>
                            <goal>execute</goal>
                        </goals>
                        <configuration>
                            <url>jdbc:postgressql://localhost:5432</url>
                            <!-- no transaction -->
                            <autocommit>true</autocommit>
                            <sqlCommand>create database "hib"</sqlCommand>
                        </configuration>
                    </execution>
                </executions>

            </plugin>
        </plugins>
    </pluginManagement>
</build>

4

1 回答 1

4

您的其中一个网址中有错字,postgressql必须是postgresql.

当你运行mvn sql:execute它时,它只会获取插件配置,而不是插件执行,除非你给它id default-cli(你的只是default)。

您配置的插件执行可能在运行正常生命周期时起作用,例如mvn compilemvn install(与 相对mvn sql:execute),但是,要使其正常工作,您需要一个plugins.plugin定义(而不是pluginManagement.plugins.plugin定义。

你实际上可以CREATEDROP数据库一起使用这个插件。我已经完成了它并将其广泛用于单元测试。我们有四个阶段:

  1. 创建数据库。从通用数据库执行
  2. 运行 DDL。从新创建的数据库执行
  3. 运行单元测试
  4. 删除数据库。从通用数据库执行

如果单元测试失败,您的数据库不会被删除,这对于分析来说可能是一件好事。这确实意味着创建数据库必须处理已经存在的待创建数据库(onError=continue)。

于 2013-09-18T19:22:33.187 回答