我正在研究Maven项目,并且我添加了flyway插件,它执行sql脚本以进行测试。我想确保这些脚本不会意外执行,但只能使用“mvn ... flyway:migrate”。
我发现 migrate 操作的默认阶段是 pre-integration-test ,但是当我运行 mvn clean install flyway isn时被调用(这对我没问题,但我想知道为什么不调用它们。)
以下是 pom.xml 的一部分:
<plugin>
<groupId>org.flywaydb</groupId>
<artifactId>flyway-maven-plugin</artifactId>
<version>3.0</version>
<configuration>
<driver>${db-driver-name}</driver>
<url>${db-url}</url>
<user>${db-user-name}</user>
<password>${db-user-password}</password>
<locations>
<location>filesystem:./src/main/resources/db/scripts/V${db-version}</location>
</locations>
<schemas>
<schema>schema</schema>
</schemas>
</configuration>
<dependencies>
<dependency>
<groupId>oracle.jdbc</groupId>
<artifactId>ojdbc6</artifactId>
<version>11.2.0.4</version>
</dependency>
</dependencies>
</plugin>
提前致谢!
答案 0 :(得分:0)
默认情况下,您可以将flyway.skip
设置为true
,只有在您想要运行迁移时才将其设为false。
此外,预包装后会进行预集成测试。这就是为什么不用mvn clean package调用它。
答案 1 :(得分:0)
请确认您在要运行的模块中拥有自己的<plugin>
部分。
不仅仅在<pluginManagement>
部分内。
答案 2 :(得分:0)
一个插件可能包含多个目标,因为在这种情况下,您不仅要迁移,还要清理,信息等。除非您在项目的执行中定义要运行的目标,否则它们将不会运行
您必须在插件xml定义的执行块中指定目标,如下所示:
<plugin>
<groupId>org.flywaydb</groupId>
<artifactId>flyway-maven-plugin</artifactId>
<version>3.0</version>
<executions>
<execution>
<goals>
<goal>migrate</goal>
</goals>
</execution>
</executions>
<configuration>
<driver>${db-driver-name}</driver>
<url>${db-url}</url>
<user>${db-user-name}</user>
<password>${db-user-password}</password>
<locations>
<location>filesystem:./src/main/resources/db/scripts/V${db-version}</location>
</locations>
<schemas>
<schema>schema</schema>
</schemas>
</configuration>
<dependencies>
<dependency>
<groupId>oracle.jdbc</groupId>
<artifactId>ojdbc6</artifactId>
<version>11.2.0.4</version>
</dependency>
</dependencies>
</plugin>