Browse Source

Revisit condition to skip AOT processing of tests

This commit stop skipping AOT processing of tests when tests execution
is skipped. With this commit, only the presence of maven.test.skip makes
the processing to skip.

This harmonize the behavior with other standard plugins that do react
to the property. For instance, the compiler plugin will not compile the
tests if that property is set, but would do so if skipTests was
provided.

Closes gh-48661
pull/48965/head
Stéphane Nicoll 1 month ago
parent
commit
54603fee87
  1. 2
      spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/docs/antora/modules/maven-plugin/pages/aot.adoc
  2. 10
      spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/java/org/springframework/boot/maven/AotTests.java
  3. 67
      spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/aot-test-skip/pom.xml
  4. 29
      spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/aot-test-skip/src/main/java/org/test/SampleApplication.java
  5. 53
      spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/aot-test-skip/src/test/java/org/test/SampleApplicationTests.java
  6. 2
      spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/main/java/org/springframework/boot/maven/ProcessTestAotMojo.java

2
spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/docs/antora/modules/maven-plugin/pages/aot.adoc

@ -92,6 +92,8 @@ include::partial$goals/process-aot.adoc[leveloffset=+1] @@ -92,6 +92,8 @@ include::partial$goals/process-aot.adoc[leveloffset=+1]
The AOT engine can be applied to JUnit 5 tests that use Spring's Test Context Framework.
Those tests are processed by the AOT engine and are then executed in a native image.
NOTE: Tests are not processed when the regular tests are skipped using the `maven.test.skip` property.
Just like <<aot.processing-applications.using-the-native-profile,for production code>>, the `spring-boot-starter-parent` defines a `nativeTest` profile that can be used to streamline the steps required to execute your tests in a native image.
The `nativeTest` profile configures the following:

10
spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/java/org/springframework/boot/maven/AotTests.java

@ -198,6 +198,16 @@ class AotTests { @@ -198,6 +198,16 @@ class AotTests {
});
}
@TestTemplate
void whenTestAotRunsWithTestSkipItIsAlsoSkipped(MavenBuild mavenBuild) {
mavenBuild.project("aot-test-skip").goals("test").execute((project) -> {
Path aotDirectory = project.toPath().resolve("target/spring-aot/test");
assertThat(aotDirectory).doesNotExist();
Path testClassesDirectory = project.toPath().resolve("target/test-classes");
assertThat(testClassesDirectory.resolve("META-INF").resolve("native-image")).doesNotExist();
});
}
List<Path> collectRelativePaths(Path sourceDirectory) {
try (Stream<Path> pathStream = Files.walk(sourceDirectory)) {
return pathStream.filter(Files::isRegularFile)

67
spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/aot-test-skip/pom.xml

@ -0,0 +1,67 @@ @@ -0,0 +1,67 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>org.springframework.boot.maven.it</groupId>
<artifactId>aot-test-skip</artifactId>
<version>0.0.1.BUILD-SNAPSHOT</version>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>@java.version@</maven.compiler.source>
<maven.compiler.target>@java.version@</maven.compiler.target>
<maven.test.skip>true</maven.test.skip>
</properties>
<build>
<plugins>
<plugin>
<groupId>@project.groupId@</groupId>
<artifactId>@project.artifactId@</artifactId>
<version>@project.version@</version>
<executions>
<execution>
<goals>
<goal>process-test-aot</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot</artifactId>
<version>@project.version@</version>
</dependency>
<dependency>
<groupId>jakarta.servlet</groupId>
<artifactId>jakarta.servlet-api</artifactId>
<version>@jakarta-servlet.version@</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>@spring-framework.version@</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-test</artifactId>
<version>@project.version@</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.assertj</groupId>
<artifactId>assertj-core</artifactId>
<version>@assertj.version@</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter</artifactId>
<version>@junit-jupiter.version@</version>
<scope>test</scope>
</dependency>
</dependencies>
</project>

29
spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/aot-test-skip/src/main/java/org/test/SampleApplication.java

@ -0,0 +1,29 @@ @@ -0,0 +1,29 @@
/*
* Copyright 2012-present the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* https://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.test;
import org.springframework.boot.SpringApplication;
import org.springframework.context.annotation.Configuration;
@Configuration(proxyBeanMethods = false)
public class SampleApplication {
public static void main(String[] args) {
SpringApplication.run(SampleApplication.class, args);
}
}

53
spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/aot-test-skip/src/test/java/org/test/SampleApplicationTests.java

@ -0,0 +1,53 @@ @@ -0,0 +1,53 @@
/*
* Copyright 2012-present the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* https://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.test;
import static org.assertj.core.api.Assertions.assertThat;
import static org.assertj.core.api.Assertions.fail;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.test.context.junit.jupiter.SpringJUnitConfig;
@SpringJUnitConfig
class SampleApplicationTests {
@Autowired
private MyBean myBean;
@Test
void contextLoads() {
assertThat(this.myBean).isNotNull();
}
@Configuration
static class MyConfig {
@Bean
MyBean myBean() {
return new MyBean();
}
}
static class MyBean {
}
}

2
spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/main/java/org/springframework/boot/maven/ProcessTestAotMojo.java

@ -118,7 +118,7 @@ public class ProcessTestAotMojo extends AbstractAotMojo { @@ -118,7 +118,7 @@ public class ProcessTestAotMojo extends AbstractAotMojo {
getLog().debug("process-test-aot goal could not be applied to pom project.");
return;
}
if (Boolean.getBoolean("skipTests") || Boolean.getBoolean("maven.test.skip")) {
if (Boolean.getBoolean("maven.test.skip")) {
getLog().info("Skipping AOT test processing since tests are skipped");
return;
}

Loading…
Cancel
Save