我目前有一个maven web项目,我正在尝试编写集成测试。对于项目的结构,我在 src / test / java 下定义了测试存根,而这些存根的spring bean定义位于 src / test / resources 下。
我想做的是,当我构建我的war工件时,我希望所有的测试存根类都可以编译并包含在war中以及spring bean定义文件中。我试图用maven war插件做到这一点,但我能够复制的唯一东西就是资源。 简单地说,我想使用测试类路径并在war文件中包含所有这些类。
似乎带有maven jetty插件的useTestClassPath选项可以解决我的问题,但我正在处理的当前项目目前正在使用Tomcat 6.0。是否有另一个maven插件或我可以配置maven war插件来实现我的目标?
答案 0 :(得分:4)
你也可以直接做到。这将把测试类和测试资源添加到WEB-INF / classes:
<plugin>
<artifactId>maven-antrun-plugin</artifactId>
<version>1.7</version>
<executions>
<execution>
<phase>process-test-classes</phase>
<configuration>
<target>
<copy todir="${basedir}/target/classes">
<fileset dir="${basedir}/target/test-classes" includes="**/*" />
</copy>
</target>
</configuration>
<goals>
<goal>run</goal>
</goals>
</execution>
</executions>
</plugin>
我还建议您将其放入单独的配置文件中,例如“集成”,并覆盖该配置文件中的包名称,以便在没有打包测试和测试战争时无法混淆正常的战争。
配置文件的完整示例为here。您可以运行mvn clean package
进行战争war-it-test.war
,但不包含测试,或者您可以运行mvn clean package -Pintegration
与战争进行战争war-it-test-integration.war
。
答案 1 :(得分:4)
我相信maven war插件的以下配置可以满足您的需求。您将测试类复制到WEB-INF / classes文件夹。您甚至可以过滤这些资源。
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<executions>
<execution>
<id>generate-test-war</id>
<phase>pre-integration-test</phase>
<goals>
<goal>war</goal>
</goals>
</execution>
</executions>
<configuration>
<warSourceDirectory>${basedir}/src/test/webapp</warSourceDirectory>
<warName>${project.artifactId}-test</warName>
<webappDirectory>${basedir}/target/${project.artifactId}-test</webappDirectory>
<primaryArtifact>false</primaryArtifact>
<webResources>
<resource>
<directory>${basedir}/target/test-classes</directory>
<targetPath>WEB-INF/classes</targetPath>
</resource>
</webResources>
</configuration>
</plugin>
请参阅http://maven.apache.org/plugins/maven-war-plugin/examples/adding-filtering-webresources.html
答案 2 :(得分:2)
您可以使用maven build helper plugin将其他文件夹添加到“普通”类路径。
但我建议为集成测试创建一个新文件夹(例如src / it / java),并添加此文件夹,但不要添加“普通”测试文件夹(src / test / java) - 相同对于资源文件夹。
答案 3 :(得分:0)
您可以改为使用maven资源插件而不是使用maven antrun插件,并将其配置为:
<plugin>
<artifactId>maven-resources-plugin</artifactId>
<version>2.5</version>
<executions>
<execution>
<phase>process-test-classes</phase>
<id>test-classes</id>
<goals>
<goal>copy-resources</goal>
</goals>
<configuration>
<overwrite>false</overwrite>
<outputDirectory>${project.build.directory}/${project.build.finalName}/WEB-INF/classes</outputDirectory>
<resources>
<resource>
<directory>${project.build.directory}/test-classes</directory>
</resource>
</resources>
</configuration>
</execution>
</executions>
</plugin>
答案 4 :(得分:0)
将Tomcat 7插件与其他类路径目录配置一起使用。
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>2.2</version>
<configuration>
<additionalClasspathDirs>
<additionalClasspathDir>${build.testOutputDirectory}</additionalClasspathDir>
</additionalClasspathDirs>
</configuration>
<executions>
<execution>
<id>start-tomcat</id>
<goals>
<goal>run</goal>
</goals>
<configuration>
<fork>true</fork>
</configuration>
</execution>
</executions>
</plugin>
答案 5 :(得分:0)
您可以在pom.xml文件中进行此配置,而在pom.xml中没有任何错误,并且可以将测试类添加到我们的jar或war文件中。
<pluginManagement>
<plugins>
<plugin>
<groupId>org.eclipse.m2e</groupId>
<artifactId>lifecycle-mapping</artifactId>
<version>1.0.0</version>
<configuration>
<lifecycleMappingMetadata>
<pluginExecutions>
<pluginExecution>
<pluginExecutionFilter>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-antrun-plugin</artifactId>
<versionRange>[1.7,)</versionRange>
<goals>
<goal>run</goal>
</goals>
</pluginExecutionFilter>
<action>
<execute />
</action>
</pluginExecution>
</pluginExecutions>
</lifecycleMappingMetadata>
</configuration>
</plugin>
</plugins>
</pluginManagement>
<plugins>
<plugin>
<artifactId>maven-antrun-plugin</artifactId>
<version>1.7</version>
<executions>
<execution>
<phase>process-test-classes</phase>
<configuration>
<target>
<copy todir="${basedir}/target/classes">
<fileset dir="${basedir}/target/test-classes" includes="**/*" />
</copy>
</target>
</configuration>
<goals>
<goal>run</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>