The profile java25-test-classpath is enabled if the JVM that launched Maven is 25 or greater. This adds additional class path entries which may not be usable if the maven-surefire-plugin or maven-failsafe-plugin sets the jvm setting to an older version.
The profile looks like:
<profile>
<id>java25-test-classpath</id>
<activation>
<jdk>[25,26)</jdk>
</activation>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<executions>
<execution>
<id>default-test</id>
<configuration>
<classesDirectory>${project.build.outputDirectory}/META-INF/versions/25
</classesDirectory>
<additionalClasspathElements>
<additionalClasspathElement>
${project.build.directory}/classes/META-INF/versions/24
</additionalClasspathElement>
<additionalClasspathElement>
${project.build.directory}/classes/META-INF/versions/23
</additionalClasspathElement>
<additionalClasspathElement>
${project.build.directory}/classes/META-INF/versions/22
</additionalClasspathElement>
<additionalClasspathElement>
${project.build.directory}/classes/META-INF/versions/21
</additionalClasspathElement>
<additionalClasspathElement>
${project.build.directory}/classes/META-INF/versions/20
</additionalClasspathElement>
<additionalClasspathElement>
${project.build.directory}/classes/META-INF/versions/19
</additionalClasspathElement>
<additionalClasspathElement>
${project.build.directory}/classes/META-INF/versions/18
</additionalClasspathElement>
<additionalClasspathElement>
${project.build.directory}/classes/META-INF/versions/17
</additionalClasspathElement>
<additionalClasspathElement>
${project.build.directory}/classes/META-INF/versions/16
</additionalClasspathElement>
<additionalClasspathElement>
${project.build.directory}/classes/META-INF/versions/15
</additionalClasspathElement>
<additionalClasspathElement>
${project.build.directory}/classes/META-INF/versions/14
</additionalClasspathElement>
<additionalClasspathElement>
${project.build.directory}/classes/META-INF/versions/13
</additionalClasspathElement>
<additionalClasspathElement>
${project.build.directory}/classes/META-INF/versions/12
</additionalClasspathElement>
<additionalClasspathElement>${project.build.outputDirectory}
</additionalClasspathElement>
</additionalClasspathElements>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
</profile>
This works when you use the build-javaXX pattern because that profile overrides these settings, example for Java 17.
<profile>
<id>java17-test</id>
<activation>
<jdk>[18,)</jdk>
<property>
<name>java17.home</name>
</property>
<file>
<exists>${basedir}/build-test-java17</exists>
</file>
</activation>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<executions>
<execution>
<id>java17-test</id>
<phase>test</phase>
<goals>
<goal>test</goal>
</goals>
<configuration>
<jvm>${java17.home}/bin/java</jvm>
<reportsDirectory>${project.build.directory}/surefire-reports/java17</reportsDirectory>
<classesDirectory>${project.build.directory}/classes/META-INF/versions/17
</classesDirectory>
<additionalClasspathElements>
<additionalClasspathElement>
${project.build.directory}/classes/META-INF/versions/16
</additionalClasspathElement>
<additionalClasspathElement>
${project.build.directory}/classes/META-INF/versions/15
</additionalClasspathElement>
<additionalClasspathElement>
${project.build.directory}/classes/META-INF/versions/14
</additionalClasspathElement>
<additionalClasspathElement>
${project.build.directory}/classes/META-INF/versions/13
</additionalClasspathElement>
<additionalClasspathElement>
${project.build.directory}/classes/META-INF/versions/12
</additionalClasspathElement>
<additionalClasspathElement>${project.build.outputDirectory}
</additionalClasspathElement>
</additionalClasspathElements>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
</profile>
An example PR that's failing due to this jberet/jsr352#721.
I'm not sure what the best option is to deal with this. A workaround is to either disable the profile or override the classesDirectory configuration option. However, then we lose testing the newly compiled source.
The profile
java25-test-classpathis enabled if the JVM that launched Maven is 25 or greater. This adds additional class path entries which may not be usable if themaven-surefire-pluginormaven-failsafe-pluginsets thejvmsetting to an older version.The profile looks like:
This works when you use the
build-javaXXpattern because that profile overrides these settings, example for Java 17.An example PR that's failing due to this jberet/jsr352#721.
I'm not sure what the best option is to deal with this. A workaround is to either disable the profile or override the
classesDirectoryconfiguration option. However, then we lose testing the newly compiled source.