diff --git a/spring-boot-project/spring-boot-docker-compose/src/main/java/org/springframework/boot/docker/compose/lifecycle/DockerComposeLifecycleManager.java b/spring-boot-project/spring-boot-docker-compose/src/main/java/org/springframework/boot/docker/compose/lifecycle/DockerComposeLifecycleManager.java index a5db6838867..4fbf7b1b63d 100644 --- a/spring-boot-project/spring-boot-docker-compose/src/main/java/org/springframework/boot/docker/compose/lifecycle/DockerComposeLifecycleManager.java +++ b/spring-boot-project/spring-boot-docker-compose/src/main/java/org/springframework/boot/docker/compose/lifecycle/DockerComposeLifecycleManager.java @@ -24,6 +24,7 @@ import java.util.Set; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; +import org.springframework.aot.AotDetector; import org.springframework.boot.SpringApplicationShutdownHandlers; import org.springframework.boot.context.properties.bind.Binder; import org.springframework.boot.docker.compose.core.DockerCompose; @@ -92,6 +93,10 @@ class DockerComposeLifecycleManager { } void start() { + if (Boolean.getBoolean("spring.aot.processing") || AotDetector.useGeneratedArtifacts()) { + logger.trace("Docker Compose support disabled with AOT and native images"); + return; + } if (!this.properties.isEnabled()) { logger.trace("Docker Compose support not enabled"); return; diff --git a/spring-boot-project/spring-boot-docker-compose/src/test/java/org/springframework/boot/docker/compose/lifecycle/DockerComposeLifecycleManagerTests.java b/spring-boot-project/spring-boot-docker-compose/src/test/java/org/springframework/boot/docker/compose/lifecycle/DockerComposeLifecycleManagerTests.java index 72d3dcbceda..f3a13c17c3d 100644 --- a/spring-boot-project/spring-boot-docker-compose/src/test/java/org/springframework/boot/docker/compose/lifecycle/DockerComposeLifecycleManagerTests.java +++ b/spring-boot-project/spring-boot-docker-compose/src/test/java/org/springframework/boot/docker/compose/lifecycle/DockerComposeLifecycleManagerTests.java @@ -31,6 +31,7 @@ import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.io.TempDir; +import org.springframework.aot.AotDetector; import org.springframework.boot.SpringApplicationShutdownHandlers; import org.springframework.boot.context.properties.bind.Binder; import org.springframework.boot.docker.compose.core.DockerCompose; @@ -116,6 +117,30 @@ class DockerComposeLifecycleManagerTests { then(this.dockerCompose).should(never()).hasDefinedServices(); } + @Test + void startWhenAotProcessingDoesNotStart() { + withSystemProperty("spring.aot.processing", "true", () -> { + EventCapturingListener listener = new EventCapturingListener(); + this.eventListeners.add(listener); + setUpRunningServices(); + this.lifecycleManager.start(); + assertThat(listener.getEvent()).isNull(); + then(this.dockerCompose).should(never()).hasDefinedServices(); + }); + } + + @Test + void startWhenUsingAotArtifactsDoesNotStart() { + withSystemProperty(AotDetector.AOT_ENABLED, "true", () -> { + EventCapturingListener listener = new EventCapturingListener(); + this.eventListeners.add(listener); + setUpRunningServices(); + this.lifecycleManager.start(); + assertThat(listener.getEvent()).isNull(); + then(this.dockerCompose).should(never()).hasDefinedServices(); + }); + } + @Test void startWhenComposeFileNotFoundThrowsException() { DockerComposeLifecycleManager manager = new DockerComposeLifecycleManager(new File("."), @@ -362,6 +387,22 @@ class DockerComposeLifecycleManagerTests { } } + private void withSystemProperty(String key, String value, Runnable action) { + String previous = System.getProperty(key); + try { + System.setProperty(key, value); + action.run(); + } + finally { + if (previous == null) { + System.clearProperty(key); + } + else { + System.setProperty(key, previous); + } + } + } + /** * Testable {@link SpringApplicationShutdownHandlers}. */ diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/java/org/springframework/boot/maven/AotTests.java b/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/java/org/springframework/boot/maven/AotTests.java index 9d21d9aad71..f2052158985 100644 --- a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/java/org/springframework/boot/maven/AotTests.java +++ b/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/java/org/springframework/boot/maven/AotTests.java @@ -176,15 +176,6 @@ class AotTests { }); } - @TestTemplate - void whenAotWithDevelopmentOnlyExclusions(MavenBuild mavenBuild) { - mavenBuild.project("aot-development-only-exclusions").goals("package").execute((project) -> { - Path aotDirectory = project.toPath().resolve("target/spring-aot/main"); - assertThat(collectRelativePaths(aotDirectory.resolve("sources"))) - .contains(Path.of("org", "test", "SampleApplication__ApplicationContextInitializer.java")); - }); - } - List collectRelativePaths(Path sourceDirectory) { try (Stream pathStream = Files.walk(sourceDirectory)) { return pathStream.filter(Files::isRegularFile) diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/aot-development-only-exclusions/pom.xml b/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/aot-development-only-exclusions/pom.xml deleted file mode 100644 index 3620e07aa00..00000000000 --- a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/aot-development-only-exclusions/pom.xml +++ /dev/null @@ -1,54 +0,0 @@ - - - 4.0.0 - org.springframework.boot.maven.it - aot-development-only-exclusions - 0.0.1.BUILD-SNAPSHOT - - UTF-8 - @java.version@ - @java.version@ - - - - - @project.groupId@ - @project.artifactId@ - @project.version@ - - - - process-aot - - - - - - - - - org.springframework.boot - spring-boot - @project.version@ - - - jakarta.servlet - jakarta.servlet-api - @jakarta-servlet.version@ - provided - - - org.springframework.boot - spring-boot-devtools - @project.version@ - true - - - org.springframework.boot - spring-boot-docker-compose - @project.version@ - true - - - diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/aot-development-only-exclusions/src/main/java/org/test/SampleApplication.java b/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/aot-development-only-exclusions/src/main/java/org/test/SampleApplication.java deleted file mode 100644 index cd19b00cf6b..00000000000 --- a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/aot-development-only-exclusions/src/main/java/org/test/SampleApplication.java +++ /dev/null @@ -1,32 +0,0 @@ -/* - * Copyright 2012-2023 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; -import org.springframework.util.Assert; -import org.springframework.util.ClassUtils; - -@Configuration(proxyBeanMethods = false) -public class SampleApplication { - - public static void main(String[] args) { - Assert.state(!ClassUtils.isPresent("org.springframework.boot.docker.compose.core.DockerCompose", null), "Should not have docker-compose"); - SpringApplication.run(SampleApplication.class, args); - } - -} diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/main/java/org/springframework/boot/maven/ProcessAotMojo.java b/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/main/java/org/springframework/boot/maven/ProcessAotMojo.java index f5f3f2837bd..44cd248c4a3 100644 --- a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/main/java/org/springframework/boot/maven/ProcessAotMojo.java +++ b/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/main/java/org/springframework/boot/maven/ProcessAotMojo.java @@ -111,7 +111,7 @@ public class ProcessAotMojo extends AbstractAotMojo { private URL[] getClassPath() throws Exception { File[] directories = new File[] { this.classesDirectory, this.generatedClasses }; - return getClassPath(directories, new ExcludeTestScopeArtifactFilter(), DOCKER_COMPOSE_EXCLUDE_FILTER); + return getClassPath(directories, new ExcludeTestScopeArtifactFilter()); } private RunArguments resolveArguments() {