I have a multi-module project. My POM structure is like below

root/pom.xml

<modules>
<!-- a,b,c & d are not dependent on each other. -->
<module>a</module>
<module>b</module>
<module>c</module>
<module>d</module>
</modules>

I am running surefire with reuseForks = true, forkCount = 1. If I am
executing all tests at the root level with mvn -T 2 test. How will tests be
executed?

Assuming maven picks modules *a* and *b* to be executed first. Then module
*a* and Module *b* tests will be executed in two separate JVM and once
those are finished. There will be two new JVM spawned which will execute
all tests for module c and module d.

Is my above understanding correct or the same two JVMs will be reused for
executing tests for module *c* and module *d?*

I am using surefire 3.0.0-M7. My entire surefire config in root/pom.xml
looks like below.

<pluginManagement>
      <plugins>
        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-surefire-plugin</artifactId>
          <version>3.0.0-M7</version>
          <configuration>
            <systemPropertyVariables>
              <!-- System properties to be applied to all tests -->
              <grpc.enabled>false</grpc.enabled>
              <management.metrics.export.datadog.enabled>false
              </management.metrics.export.datadog.enabled>
              <spring.profiles.active>test</spring.profiles.active>
              <spring.zipkin.enabled>false</spring.zipkin.enabled>

<spring.test.context.cache.maxSize>3</spring.test.context.cache.maxSize>
              <user.language>en</user.language>
              <user.region>US</user.region>
              <ut.forkNumber>$${surefire.forkNumber}</ut.forkNumber>
            </systemPropertyVariables>
            <!--These values are chosen experimentally-->
            <argLine>
              -Xms512m -Xmx3g -XX:MaxDirectMemorySize=512m
-XX:MaxMetaspaceSize=768m
              -XX:+HeapDumpOnOutOfMemoryError @{argLine}
              <!-- https://github.com/RuedigerMoeller/fast-serialization#mvn
-->
              --add-modules=jdk.incubator.foreign
              --add-opens=java.base/java.lang=ALL-UNNAMED
              --add-opens=java.base/java.math=ALL-UNNAMED
              --add-opens=java.base/java.util=ALL-UNNAMED
              --add-opens=java.base/java.util.concurrent=ALL-UNNAMED
              --add-opens=java.base/java.net=ALL-UNNAMED
              --add-opens=java.base/java.text=ALL-UNNAMED
              --add-opens=java.sql/java.sql=ALL-UNNAMED
              <!-- Needed only for TestingUtils.parseJsonToPojo -->
              --add-opens=java.base/java.time=ALL-UNNAMED
              <!-- For wiremock -->

--add-opens=java.xml/com.sun.org.apache.xpath.internal.jaxp=ALL-UNNAMED
            </argLine>

            <!--  Runs test suite / classes in parallel-->
            <parallel>suitesAndClasses</parallel>
            <perCoreThreadCount>false</perCoreThreadCount>

            <!--Uncomment the two lines below if you want to redirect all
mvn test results into files.-->
            <!--<redirectTestOutputToFile>true</redirectTestOutputToFile>-->

<!--<reportsDirectory>${project.build.directory}/test-reports</reportsDirectory>-->

            <!--  Starts multiple JVMs and runs tests in parallel-->
            <forkCount>1</forkCount>
            <reuseForks>true</reuseForks>
          </configuration>
        </plugin>
        <plugin>

Reply via email to