目前,我有我试图写集成测试的一个maven Web项目。 对于项目的结构,我在src / test / java下定义的测试存根,而对于这些存根春天bean定义在src /测试/资源坐下。
我想这样做,就是当我建立我的战争神器,我想所有的测试存根类与弹簧bean定义文件一起被编译并列入战争。 我试着使用Maven插件战争做,但唯一的东西,我已经能够复制的资源。 简单地说,我想利用测试类路径中,包括在我的战争文件中的所有这些类。
这似乎与Maven的码头插件useTestClassPath选择将解决我的问题,但目前的项目我的工作目前正在使用Tomcat 6.0。 难道还有其他的Maven插件或一种方法,我可以配置Maven的战争插件来实现我的目标是什么?
你也可以做它直截了当。 这都将测试类和测试资源添加到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>
我还建议你把它变成像“一体化”单独的配置文件,并在该配置文件覆盖包的名字不能够混淆正常的战争没有打包在测试和测试战争。
与配置文件中的完整的例子就是在这里 。 你可能会碰到mvn clean package
有战争war-it-test.war
没有测试包括,或者你可能会遇到mvn clean package -Pintegration
有战争war-it-test-integration.war
与测试包括战争。
我相信Maven的战争插件下面的配置会做你想要什么。 您在测试类复制到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
你可以使用Maven构建助手插件将其他文件夹添加到“正常”的类路径。
但我会建议创建一个新的文件夹为您的集成测试(例如SRC /它/ JAVA),并加入该文件夹,而不是“正常”的测试文件夹中(src / test / java下) - 同为资源夹。
除了使用maven的antrun插件,你也可以使用Maven的资源插件和配置它是这样的:
<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>
使用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>
为此,您可以配置在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>
我们需要下面的插件添加到pom.xml中以测试用例添加到罐子。 由于@IvonSopov
<plugin>
<artifactId>maven-antrun-plugin</artifactId>
<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>
但是,加入这一行后,我们得到了构建成功,并且还能够在测试用例类添加到罐子..但问题是在pom.xml中它显示像错误
插件执行未包括生命周期配置:org.apache.maven.plugins:行家-antrun-插件:1.8:运行(执行:默认值,相:过程检验类)
为了消除这个错误,我们需要包括以下插件作为构建标签中的一个单独的标签。 (里面没有我们先前添加的插件。)
<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>
现在,我们可以创建包括测试类没有任何错误的罐子。
文章来源: How do I include test classes and configuration in my war for integration testing using maven?