Maven项目从依赖项运行sql-maven-plugin执行

时间:2017-11-29 03:35:44

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

如何配置我的Maven pom.xml和/或sql-maven-plugin,以便我的依赖项lib.example.jdbc中指定的单元测试相关数据库执行,{&}在构建项目pom.xml的{​​{1}}时执行了什么?目前我在com.example.project上为mvn clean install运行pom.xml我发现我的SQL数据库包含在com.example.project中创建的表。一个明显的解决方法是在每个lib.example.jdbc文件中使用mysql.database的不同属性,但我觉得更大的问题是库的(依赖)数据库执行是在测试阶段运行的。主要项目。我无法想象这是正确的,因为一个人可以拥有数百个pom.xml个依赖关系,他们自己的测试和数据库执行在构建最终项目时不应该运行。

更新:Spring注释是在我的回答中发现的罪魁祸首,所以我更新了问题标签以反映这一点。

以下是来自pom.xml的{​​{1}}的相关示例:

pom.xml

以下是来自lib.example.jdbc的{​​{1}}的相关示例:

...
<groupId>lib.example</groupId>
<artifactId>jdbc</artifactId>
<version>1.0.0</version>
<packaging>jar</packaging>
...
<properties>
  ...
  <mysql.port>3306</mysql.port>
  <mysql.database>testDb</mysql.database>
  <mysql.user>root</mysql.user>
  <mysql.pass>password</mysql.pass>
</properties>
...
<build>
...
    <plugins>
        ...
        <plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>sql-maven-plugin</artifactId>
            <version>1.5</version>
            <dependencies>
                <dependency>
                    <groupId>mysql</groupId>
                    <artifactId>mysql-connector-java</artifactId>
                    <version>5.1.44</version>
                </dependency>
            </dependencies>
            <configuration>
                <driver>com.mysql.jdbc.Driver</driver>
                <url>jdbc:mysql://${mysql.host}:${mysql.port}/${mysql.database}?useSSL=false</url>
                <username>${mysql.user}</username>
                <password>${mysql.pass}</password>
                <settingsKey>sensibleKey</settingsKey>
                <!--all executions are ignored if -Dmaven.test.skip=true-->
                <skip>${maven.test.skip}</skip>
            </configuration>
            <executions>
                <execution>
                    <id>create-db</id>
                    <phase>process-test-resources</phase>
                    <goals>
                        <goal>execute</goal>
                    </goals>
                    <configuration>
                        <url>jdbc:mysql://${mysql.host}:${mysql.port}?useSSL=false</url>
                        <autocommit>true</autocommit>
                        <sqlCommand>create database if not exists `${mysql.database}`</sqlCommand>
                    </configuration>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

1 个答案:

答案 0 :(得分:1)

经过进一步调查后,似乎问题不在于sql-maven-plugin,而在于com.example.projectlib.example.jdbc测试运行lib.example.jdbc测试时的问题。 1}}。以下是schema.sql中的类级别注释,这对我造成了问题。我将代码从data.sqlpom.xml移到我的<sqlCommand> com.example.project块中,并在测试@RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(classes = {TestConfig.class}) @Sql(executionPhase = Sql.ExecutionPhase.BEFORE_TEST_METHOD, scripts = {"classpath:schema.sql","classpath:data.sql"}) public class DataDaoTest { ... @Test public void testRetrieval() throws Exception { ... } } 时不再执行。

filter