我们在生产中使用MySQL,使用Derby进行单元测试。我们的pom.xml在测试之前复制了derby版本的persistence.xml,并在prepare-package阶段将其替换为MySQL版本:
<plugin>
<artifactId>maven-antrun-plugin</artifactId>
<version>1.3</version>
<executions>
<execution>
<id>copy-test-persistence</id>
<phase>process-test-resources</phase>
<configuration>
<tasks>
<!--replace the "proper" persistence.xml with the "test" version-->
<copy
file="${project.build.testOutputDirectory}/META-INF/persistence.xml.test"
tofile="${project.build.outputDirectory}/META-INF/persistence.xml"
overwrite="true" verbose="true" failonerror="true" />
</tasks>
</configuration>
<goals>
<goal>run</goal>
</goals>
</execution>
<execution>
<id>restore-persistence</id>
<phase>prepare-package</phase>
<configuration>
<tasks>
<!--restore the "proper" persistence.xml-->
<copy
file="${project.build.outputDirectory}/META-INF/persistence.xml.production"
tofile="${project.build.outputDirectory}/META-INF/persistence.xml"
overwrite="true" verbose="true" failonerror="true" />
</tasks>
</configuration>
<goals>
<goal>run</goal>
</goals>
</execution>
</executions>
</plugin>
问题是,如果我执行mvn jetty:运行它将在启动jetty之前执行测试persistence.xml文件复制任务。我希望它使用部署版本运行。我该如何解决这个问题?
答案 0 :(得分:5)
尝试添加参数-Dmaven.test.skip=true or -DskipTests=true in the command line。例如
mvn -DskipTests=true jetty:run ...
不确定这是否会跳过进程测试资源阶段。
有关跳过测试is available in the Surefire plugin documentation的更多信息。
答案 1 :(得分:2)
jetty:run
目标在执行自身之前调用生命周期阶段test-compile
的执行。因此,跳过测试执行不会改变任何内容。
您需要做的是将copy-test-persistence
执行绑定到test-compile
之后但test
之前的生命周期阶段。而且还有十几个候选人,但只有一个:process-test-classes
。
这在概念上可能并不理想,但它是最不好的选择,它会起作用:
<plugin>
<artifactId>maven-antrun-plugin</artifactId>
<version>1.3</version>
<executions>
<execution>
<id>copy-test-persistence</id>
<phase>process-test-classes</phase>
<configuration>
<tasks>
<!--replace the "proper" persistence.xml with the "test" version-->
<copy
file="${project.build.testOutputDirectory}/META-INF/persistence.xml.test"
tofile="${project.build.outputDirectory}/META-INF/persistence.xml"
overwrite="true" verbose="true" failonerror="true" />
</tasks>
</configuration>
<goals>
<goal>run</goal>
</goals>
</execution>
...
</executions>
</plugin>