diff --git a/start-site/src/main/java/io/spring/start/site/extension/dependency/springazure/SpringAzureDockerComposeProjectGenerationConfiguration.java b/start-site/src/main/java/io/spring/start/site/extension/dependency/springazure/SpringAzureDockerComposeProjectGenerationConfiguration.java index ce80a7707a4..f7ba912a97e 100644 --- a/start-site/src/main/java/io/spring/start/site/extension/dependency/springazure/SpringAzureDockerComposeProjectGenerationConfiguration.java +++ b/start-site/src/main/java/io/spring/start/site/extension/dependency/springazure/SpringAzureDockerComposeProjectGenerationConfiguration.java @@ -19,9 +19,16 @@ import io.spring.initializr.generator.buildsystem.Build; import io.spring.initializr.generator.buildsystem.Dependency; import io.spring.initializr.generator.buildsystem.DependencyScope; +import io.spring.initializr.generator.buildsystem.gradle.GradleBuildSystem; +import io.spring.initializr.generator.buildsystem.maven.MavenBuildSystem; +import io.spring.initializr.generator.condition.ConditionalOnBuildSystem; import io.spring.initializr.generator.condition.ConditionalOnRequestedDependency; import io.spring.initializr.generator.project.ProjectGenerationConfiguration; import io.spring.initializr.generator.spring.build.BuildCustomizer; +import io.spring.initializr.generator.spring.build.gradle.DevelopmentOnlyDependencyGradleBuildCustomizer; +import io.spring.initializr.generator.spring.build.maven.OptionalDependencyMavenBuildCustomizer; +import io.spring.start.site.container.ComposeFileCustomizer; +import io.spring.start.site.container.DockerServiceResolver; import org.springframework.context.annotation.Bean; @@ -29,18 +36,39 @@ * Configuration for generation of projects that depend on Spring Azure Docker Compose. * * @author Eddú Meléndez + * @author Moritz Halbritter */ @ProjectGenerationConfiguration @ConditionalOnRequestedDependency("azure-storage") class SpringAzureDockerComposeProjectGenerationConfiguration { + private static final String DEPENDENCY_ID = "spring-azure-docker-compose"; + @Bean @ConditionalOnRequestedDependency("docker-compose") BuildCustomizer springAzureDockerComposeBuildCustomizer() { return (build) -> build.dependencies() - .add("spring-azure-docker-compose", - Dependency.withCoordinates("com.azure.spring", "spring-cloud-azure-docker-compose") - .scope(DependencyScope.TEST_COMPILE)); + .add(DEPENDENCY_ID, Dependency.withCoordinates("com.azure.spring", "spring-cloud-azure-docker-compose") + .scope(DependencyScope.RUNTIME)); + } + + @Bean + @ConditionalOnBuildSystem(MavenBuildSystem.ID) + OptionalDependencyMavenBuildCustomizer springAzureDockerComposeMavenBuildCustomizer() { + return new OptionalDependencyMavenBuildCustomizer(DEPENDENCY_ID); + } + + @Bean + @ConditionalOnBuildSystem(GradleBuildSystem.ID) + DevelopmentOnlyDependencyGradleBuildCustomizer springAzureDockerComposeGradleBuildCustomizer() { + return new DevelopmentOnlyDependencyGradleBuildCustomizer(DEPENDENCY_ID); + } + + @Bean + @ConditionalOnRequestedDependency("docker-compose") + ComposeFileCustomizer azureStorageComposeFileCustomizer(DockerServiceResolver serviceResolver) { + return (composeFile) -> serviceResolver.doWith("azurite", + (service) -> composeFile.services().add("azurite", service)); } } diff --git a/start-site/src/main/java/io/spring/start/site/extension/dependency/springazure/SpringAzureStorageProjectGenerationConfiguration.java b/start-site/src/main/java/io/spring/start/site/extension/dependency/springazure/SpringAzureStorageProjectGenerationConfiguration.java deleted file mode 100644 index fd6fd4ba629..00000000000 --- a/start-site/src/main/java/io/spring/start/site/extension/dependency/springazure/SpringAzureStorageProjectGenerationConfiguration.java +++ /dev/null @@ -1,52 +0,0 @@ -/* - * Copyright 2012-2024 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 io.spring.start.site.extension.dependency.springazure; - -import io.spring.initializr.generator.condition.ConditionalOnRequestedDependency; -import io.spring.initializr.generator.project.ProjectGenerationConfiguration; -import io.spring.start.site.container.ComposeFileCustomizer; -import io.spring.start.site.container.DockerServiceResolver; -import io.spring.start.site.container.ServiceConnections; -import io.spring.start.site.container.ServiceConnectionsCustomizer; - -import org.springframework.context.annotation.Bean; - -/** - * Configuration for generation of projects that depend on Azurite (Storage Emulator). - * - * @author Eddú Meléndez - */ -@ProjectGenerationConfiguration -@ConditionalOnRequestedDependency("azure-storage") -class SpringAzureStorageProjectGenerationConfiguration { - - @Bean - @ConditionalOnRequestedDependency("testcontainers") - ServiceConnectionsCustomizer azureStorageServiceConnectionsCustomizer(DockerServiceResolver serviceResolver) { - return (serviceConnections) -> serviceResolver.doWith("azurite", - (service) -> serviceConnections.addServiceConnection(ServiceConnections.ServiceConnection - .ofGenericContainer("azurite", service, "azure-storage/azurite"))); - } - - @Bean - @ConditionalOnRequestedDependency("docker-compose") - ComposeFileCustomizer azureStorageComposeFileCustomizer(DockerServiceResolver serviceResolver) { - return (composeFile) -> serviceResolver.doWith("azurite", - (service) -> composeFile.services().add("azurite", service)); - } - -} diff --git a/start-site/src/main/java/io/spring/start/site/extension/dependency/springazure/SpringAzureTestcontainersProjectGenerationConfiguration.java b/start-site/src/main/java/io/spring/start/site/extension/dependency/springazure/SpringAzureTestcontainersProjectGenerationConfiguration.java index b4aec467430..f2f3500f8ed 100644 --- a/start-site/src/main/java/io/spring/start/site/extension/dependency/springazure/SpringAzureTestcontainersProjectGenerationConfiguration.java +++ b/start-site/src/main/java/io/spring/start/site/extension/dependency/springazure/SpringAzureTestcontainersProjectGenerationConfiguration.java @@ -22,6 +22,9 @@ import io.spring.initializr.generator.condition.ConditionalOnRequestedDependency; import io.spring.initializr.generator.project.ProjectGenerationConfiguration; import io.spring.initializr.generator.spring.build.BuildCustomizer; +import io.spring.start.site.container.DockerServiceResolver; +import io.spring.start.site.container.ServiceConnections; +import io.spring.start.site.container.ServiceConnectionsCustomizer; import org.springframework.context.annotation.Bean; @@ -43,4 +46,12 @@ BuildCustomizer springAzureTestcontainersBuildCustomizer() { .scope(DependencyScope.TEST_COMPILE)); } + @Bean + @ConditionalOnRequestedDependency("testcontainers") + ServiceConnectionsCustomizer azureStorageServiceConnectionsCustomizer(DockerServiceResolver serviceResolver) { + return (serviceConnections) -> serviceResolver.doWith("azurite", + (service) -> serviceConnections.addServiceConnection(ServiceConnections.ServiceConnection + .ofGenericContainer("azurite", service, "azure-storage/azurite"))); + } + } diff --git a/start-site/src/main/resources/META-INF/spring.factories b/start-site/src/main/resources/META-INF/spring.factories index af88d229833..216c753ae88 100644 --- a/start-site/src/main/resources/META-INF/spring.factories +++ b/start-site/src/main/resources/META-INF/spring.factories @@ -36,7 +36,6 @@ io.spring.start.site.extension.dependency.springai.SpringAiTestcontainersProject io.spring.start.site.extension.dependency.springai.SpringAiWeaviateProjectGenerationConfiguration,\ io.spring.start.site.extension.dependency.springamqp.SpringAmqpProjectGenerationConfiguration,\ io.spring.start.site.extension.dependency.springazure.SpringAzureDockerComposeProjectGenerationConfiguration,\ -io.spring.start.site.extension.dependency.springazure.SpringAzureStorageProjectGenerationConfiguration,\ io.spring.start.site.extension.dependency.springazure.SpringAzureProjectGenerationConfiguration,\ io.spring.start.site.extension.dependency.springazure.SpringAzureTestcontainersProjectGenerationConfiguration,\ io.spring.start.site.extension.dependency.springboot.SpringBootProjectGenerationConfiguration,\ diff --git a/start-site/src/test/java/io/spring/start/site/extension/dependency/springazure/SpringAzureDockerComposeProjectGenerationConfigurationTests.java b/start-site/src/test/java/io/spring/start/site/extension/dependency/springazure/SpringAzureDockerComposeProjectGenerationConfigurationTests.java index b11be154752..eead3540250 100644 --- a/start-site/src/test/java/io/spring/start/site/extension/dependency/springazure/SpringAzureDockerComposeProjectGenerationConfigurationTests.java +++ b/start-site/src/test/java/io/spring/start/site/extension/dependency/springazure/SpringAzureDockerComposeProjectGenerationConfigurationTests.java @@ -16,10 +16,13 @@ package io.spring.start.site.extension.dependency.springazure; +import io.spring.initializr.generator.test.project.ProjectStructure; import io.spring.initializr.web.project.ProjectRequest; import io.spring.start.site.extension.AbstractExtensionTests; import org.junit.jupiter.api.Test; +import org.springframework.core.io.ClassPathResource; + import static org.assertj.core.api.Assertions.assertThat; /** @@ -29,11 +32,24 @@ */ class SpringAzureDockerComposeProjectGenerationConfigurationTests extends AbstractExtensionTests { + @Test + void doesNothingWithoutDockerCompose() { + ProjectRequest request = createProjectRequest("web", "azure-storage"); + ProjectStructure structure = generateProject(request); + assertThat(structure.getProjectDirectory().resolve("compose.yaml")).doesNotExist(); + } + + @Test + void createsAzuriteService() { + ProjectRequest request = createProjectRequest("docker-compose", "azure-storage"); + assertThat(composeFile(request)).hasSameContentAs(new ClassPathResource("compose/azurite.yaml")); + } + @Test void springAzureDockerComposeDependencyIsAdded() { ProjectRequest projectRequest = createProjectRequest("docker-compose", "azure-storage"); assertThat(mavenPom(projectRequest)).hasDependency("com.azure.spring", "spring-cloud-azure-docker-compose", - null, "test"); + null, "runtime"); } @Test diff --git a/start-site/src/test/java/io/spring/start/site/extension/dependency/springazure/SpringAzureStorageProjectGenerationConfigurationTests.java b/start-site/src/test/java/io/spring/start/site/extension/dependency/springazure/SpringAzureStorageProjectGenerationConfigurationTests.java deleted file mode 100644 index 93e139ac4a8..00000000000 --- a/start-site/src/test/java/io/spring/start/site/extension/dependency/springazure/SpringAzureStorageProjectGenerationConfigurationTests.java +++ /dev/null @@ -1,48 +0,0 @@ -/* - * Copyright 2012-2024 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 io.spring.start.site.extension.dependency.springazure; - -import io.spring.initializr.generator.test.project.ProjectStructure; -import io.spring.initializr.web.project.ProjectRequest; -import io.spring.start.site.extension.AbstractExtensionTests; -import org.junit.jupiter.api.Test; - -import org.springframework.core.io.ClassPathResource; - -import static org.assertj.core.api.Assertions.assertThat; - -/** - * Tests for {@link SpringAzureStorageProjectGenerationConfiguration} - * - * @author Eddú Meléndez - */ -class SpringAzureStorageProjectGenerationConfigurationTests extends AbstractExtensionTests { - - @Test - void doesNothingWithoutDockerCompose() { - ProjectRequest request = createProjectRequest("web", "azure-storage"); - ProjectStructure structure = generateProject(request); - assertThat(structure.getProjectDirectory().resolve("compose.yaml")).doesNotExist(); - } - - @Test - void createsAzuriteService() { - ProjectRequest request = createProjectRequest("docker-compose", "azure-storage"); - assertThat(composeFile(request)).hasSameContentAs(new ClassPathResource("compose/azurite.yaml")); - } - -}