Java maven构建花费了出乎意料的长时间

Java maven构建花费了出乎意料的长时间,java,maven,jacoco,Java,Maven,Jacoco,我有一个项目,有单元和集成测试。我有两套测试套件: @RunWith(ClasspathSuite.class) @ClasspathSuite.ClassnameFilters({ ".*Test", "!.*IntegrationTest", "!.*ResourceTest", "!.*DAOTest" }) @ClasspathSuite.SuiteTypes({ SuiteType.JUNIT38_TEST_CLASSES, SuiteType.TEST_CLASSES, SuiteT

我有一个项目,有单元和集成测试。我有两套测试套件:

@RunWith(ClasspathSuite.class)
@ClasspathSuite.ClassnameFilters({ ".*Test", "!.*IntegrationTest", "!.*ResourceTest", "!.*DAOTest" })
@ClasspathSuite.SuiteTypes({ SuiteType.JUNIT38_TEST_CLASSES, SuiteType.TEST_CLASSES, SuiteType.RUN_WITH_CLASSES })
public class AutoTestSuite {
}
它在大约20秒内运行70个测试

@RunWith(ClasspathSuite.class)
@ClasspathSuite.SuiteTypes({ SuiteType.JUNIT38_TEST_CLASSES, SuiteType.TEST_CLASSES, SuiteType.RUN_WITH_CLASSES })
@ClasspathSuite.ClassnameFilters({ ".*IntegrationTest" })
public class IntegrationTestSuite {
}
它在大约80秒内运行99个集成测试

这很好,但是当我尝试在本地和Jenkins内部运行maven构建时,测试时间为12-18分钟,可以运行348个测试。显然是我的pom.xml,甚至考虑到jacoco的检查。有人能看到我用“mvn clean package调用的以下内容有什么问题吗

<plugin>
                <groupId>org.jacoco</groupId>
                <artifactId>jacoco-maven-plugin</artifactId>
                <version>0.6.0.201210061924</version>
                <executions>
                    <execution>
                        <goals>
                            <goal>prepare-agent</goal>
                        </goals>
                        <configuration>
                            <propertyName>jacoco.argLine.unit</propertyName>
                            <destFile>${jacoco.destFile.unit}</destFile>
                        </configuration>
                    </execution>
                    <execution>
                        <id>pre-integration-test</id>
                        <phase>pre-integration-test</phase>
                        <goals>
                            <goal>prepare-agent</goal>
                        </goals>
                        <configuration>
                            <propertyName>jacoco.argLine.it</propertyName>
                            <destFile>${jacoco.destFile.it}</destFile>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
            <!-- UNIT tests only with mvn clean test -->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-surefire-plugin</artifactId>
                <version>${version.surefire}</version>
                <dependencies>
                    <dependency>
                        <groupId>org.apache.maven.surefire</groupId>
                        <artifactId>surefire-junit47</artifactId>
                        <version>${version.surefire}</version>
                    </dependency>
                </dependencies>
                <configuration>
                    <argLine>${jacoco.argLine.unit}
                        -Dfile.encoding=${project.build.sourceEncoding} -Xmx512m
                    </argLine>
                    <forkMode>always</forkMode>
                    <parallel>classes</parallel>
                    <includes>
                        <include>**/*.class</include>
                    </includes>
                    <excludes>
                        <exclude>**/*.IntegrationTest.java</exclude>
                    </excludes>
                </configuration>
            </plugin>
            <!-- INTEGRATION tests that are run with "mvn clean verify" -->

            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-failsafe-plugin</artifactId>
                <version>${version.surefire}</version>
                <dependencies>
                    <dependency>
                        <groupId>org.apache.maven.surefire</groupId>
                        <artifactId>surefire-junit47</artifactId>
                        <version>${version.surefire}</version>
                    </dependency>
                </dependencies>
                <configuration>
                    <forkMode>pertest</forkMode>
                    <reportsDirectory>${project.build.directory}/surefire-reports</reportsDirectory>
                    <argLine>${jacoco.argLine.it}
                        -Dfile.encoding=${project.build.sourceEncoding} -Xmx512m
                    </argLine>
                    <includes>
                        <include>**/*.class</include>
                    </includes>
                </configuration>
                <executions>
                    <execution>
                        <id>integration-test</id>
                        <phase>integration-test</phase>
                        <goals>
                            <goal>integration-test</goal>
                        </goals>
                    </execution>
                    <execution>
                        <id>verify</id>
                        <phase>verify</phase>
                        <goals>
                            <goal>verify</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>

org.jacoco
jacocomaven插件
0.6.0.201210061924
配制剂
jacoco.argLine.unit
${jacoco.destFile.unit}
预集成测试
预集成测试
配制剂
jacoco.argLine.it
${jacoco.destFile.it}
org.apache.maven.plugins
maven surefire插件
${version.surefire}
org.apache.maven.surefire
surefire-junit47
${version.surefire}
${jacoco.argLine.unit}
-Dfile.encoding=${project.build.sourceEncoding}-Xmx512m
总是
班级
**/*.类
**/*.IntegrationTest.java
org.apache.maven.plugins
maven故障保护插件
${version.surefire}
org.apache.maven.surefire
surefire-junit47
${version.surefire}
乖巧的
${project.build.directory}/surefire报告
${jacoco.argLine.it}
-Dfile.encoding=${project.build.sourceEncoding}-Xmx512m
**/*.类
集成测试
集成测试
集成测试
验证
验证
验证

测试看起来重复且耗时如此之长,这有什么原因吗?

我不是maven或surefire专家,但我认为surefire插件会执行它在测试目录下找到的每个测试文件。这意味着默认配置不需要测试套件。surefire会查找并运行您的测试套件和其他测试可能是要运行的测试数量增加了2倍的原因。但我不知道为什么要运行两倍以上的时间

如果是这种情况,您可以告诉surefire只运行您的测试套件:

<configuration>
  ...
  <includes>
    <include>AutoTestSuite.java</include>
  </includes>
</configuration>

相反,您不会运行插入指令的版本。

这个问题似乎离题了,因为它显然太局限于您的位置。我不确定我是否理解您的意思。这是一个maven代码覆盖率问题,当然我不是唯一一个对该主题有疑问的人。我做了更改,构建只花了两分钟s、 但是,我没有代码覆盖范围或其他声纳覆盖范围。如果您将其更改为
自动测试套件.class
?谢谢!我将surefire更改为AutoTestSuite.class,将failsafe更改为IntegrationTestSuite.class,我的构建时间减少到大约2.40分钟。声纳完成了所有单元和集成测试。太好了!我升级了ted我的答案,以防其他人有同样的问题,这样他们就不必阅读评论来获得最终答案。
<configuration>
  ...
  <includes>
    <include>AutoTestSuite.class</include>
  </includes>
</configuration>