我有一个大型项目,大约有5000个测试用例。运行mvn clean install
时,它将运行test
目标两次(一次作为安装的一部分,第二次作为surefire
插件的一部分)。
为什么需要第二次运行test
?是否迫使surefire
使用test
目标结果而不是重新调用它自己?
我认为这是浪费时间和机器资源,特别是最近第二轮运行test
导致PermGen
构建错误,无论我将多少堆泵入maven runner,它仍然在第二轮测试。
这是我可靠的插入配置:
<plugin>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.18.1</version>
<executions>
<execution>
<id>default-test</id>
<phase>test</phase>
<goals>
<goal>test</goal>
</goals>
<configuration>
<parallel>classes</parallel>
<threadCount>3</threadCount>
</configuration>
</execution>
</executions>
</plugin>
有没有办法调整插件以更好地处理机器资源?
以下是执行的完整默认maven配置文件:
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<version>2.0.2</version>
<configuration>
<archive>
<manifest>
<addDefaultImplementationEntries>true</addDefaultImplementationEntries>
</manifest>
<manifestEntries>
<Build-Number>${build.number}</Build-Number>
<Job-Name>${job.name}</Job-Name>
<Build-Url>${build.url}</Build-Url>
<Git-Commit>${git.commit}</Git-Commit>
<Git-Branch>${git.branch}</Git-Branch>
<Timestamp>${maven.build.timestamp}</Timestamp>
<StyleGuide-Version>${styleguide.version}</StyleGuide-Version>
</manifestEntries>
</archive>
<warName>pss</warName>
</configuration>
</plugin>
<plugin>
<groupId>com.cj.jshintmojo</groupId>
<artifactId>jshint-maven-plugin</artifactId>
<version>1.3.0</version>
<executions>
<execution>
<goals>
<goal>lint</goal>
</goals>
</execution>
</executions>
<configuration>
<options>maxparams:5,camelcase,eqeqeq,forin,immed,latedef,noarg,noempty,nonew,expr</options>
<directories>
<directory>src/main/webapp/js/page</directory>
</directories>
<excludes>
<exclude>src/main/webapp/js/page/marketingPreferences.js</exclude>
<exclude>src/main/webapp/js/page/changeCarParkingDetails.js</exclude>
<exclude>src/main/webapp/js/page/angularjs-app.js</exclude>
<exclude>src/main/webapp/js/page/content-cover.js</exclude>
<exclude>src/main/webapp/js/page/amendmentConfirm.js</exclude>
</excludes>
</configuration>
</plugin>
<plugin>
<groupId>org.lesscss</groupId>
<artifactId>lesscss-maven-plugin</artifactId>
<version>1.3.3</version>
<executions>
<execution>
<id>bingleless</id>
<configuration>
<sourceDirectory>${project.basedir}/src/main/webapp/app-resources/</sourceDirectory>
<outputDirectory>${project.basedir}/src/main/webapp/app-resources/</outputDirectory>
<includes>
<include>**\/policy-self-service\/**\/*pss-sg.less</include>
</includes>
<compress>true</compress>
</configuration>
<goals>
<goal>compile</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>net.alchim31.maven</groupId>
<artifactId>yuicompressor-maven-plugin</artifactId>
<version>1.1</version>
<executions>
<execution>
<goals>
<goal>compress</goal>
</goals>
</execution>
</executions>
<configuration>
<excludes>
<exclude>**/*.min.js</exclude>
<exclude>**/*.min.css</exclude>
<exclude>**/style-guide/**</exclude>
<exclude>**/generated/**</exclude>
<exclude>**/app-resources/common/**</exclude>
<exclude>**/app-resources/bower_components/**</exclude>
<exclude>**/app-resources/policy-self-service/**</exclude>
</excludes>
<nosuffix>true</nosuffix>
<jswarn>false</jswarn>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-checkstyle-plugin</artifactId>
<configuration>
<logViolationsToConsole>true</logViolationsToConsole>
</configuration>
</plugin>
<plugin>
<artifactId>maven-surefire-plugin</artifactId>
<version>${maven-surefire-plugin.version}</version>
<configuration>
<parallel>classes</parallel>
<threadCount>3</threadCount>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-report-plugin</artifactId>
<version>${maven-surefire-report-plugin.version}</version>
<executions>
<execution>
<phase>install</phase>
<goals>
<goal>report-only</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
答案 0 :(得分:4)
我认为<execution>
中的pom.xml
导致第二次测试运行。除了测试阶段的默认目标外,Maven还将其视为另一个目标。
由于maven-surefire-plugin
是Maven默认用于测试阶段的插件,因此您只需在<configuration>
之外提供<execution>
部分。修改您的pom.xml
,如下所示
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.18.1</version>
<configuration>
<parallel>classes</parallel>
<threadCount>3</threadCount>
</configuration>
</plugin>
</plugins>
答案 1 :(得分:0)
如果您的pom中同时包含cobertura和surefire插件,则测试将执行两次。为了避免像下面提到的那样在cobertura插件中添加执行阶段为空:
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>cobertura-maven-plugin</artifactId>
<executions>
<execution>
<phase>none</phase>
</execution>
</executions>
</plugin>