From b1b3eb1f885a6460764c422205ecc8361431ee79 Mon Sep 17 00:00:00 2001 From: Dave Franken Date: Tue, 22 Aug 2023 10:43:11 +0200 Subject: [PATCH 1/3] Exclude spring-boot-docker-compose from image. Fixes #158 --- first-party/build.gradle | 2 +- .../jib-spring-boot-extension-maven/README.md | 11 +- .../JibSpringBootDevtoolsExtension.java | 30 ++++ .../JibSpringBootDockerComposeExtension.java | 30 ++++ ...java => JibSpringBootModuleExtension.java} | 56 ++++---- ...ib.maven.extension.JibMavenPluginExtension | 2 +- ... => JibSpringBootModuleExtensionTest.java} | 133 +++++++++--------- 7 files changed, 166 insertions(+), 98 deletions(-) create mode 100644 first-party/jib-spring-boot-extension-maven/src/main/java/com/google/cloud/tools/jib/maven/extension/springboot/JibSpringBootDevtoolsExtension.java create mode 100644 first-party/jib-spring-boot-extension-maven/src/main/java/com/google/cloud/tools/jib/maven/extension/springboot/JibSpringBootDockerComposeExtension.java rename first-party/jib-spring-boot-extension-maven/src/main/java/com/google/cloud/tools/jib/maven/extension/springboot/{JibSpringBootExtension.java => JibSpringBootModuleExtension.java} (67%) rename first-party/jib-spring-boot-extension-maven/src/test/java/com/google/cloud/tools/jib/maven/extension/springboot/{JibSpringBootExtensionTest.java => JibSpringBootModuleExtensionTest.java} (60%) diff --git a/first-party/build.gradle b/first-party/build.gradle index 78775c4..8dfdf86 100644 --- a/first-party/build.gradle +++ b/first-party/build.gradle @@ -59,7 +59,7 @@ subprojects { JIB_GRADLE_EXTENSION: 'com.google.cloud.tools:jib-gradle-plugin-extension-api:0.4.0', JIB_MAVEN_EXTENSION: 'com.google.cloud.tools:jib-maven-plugin-extension-api:0.4.0', - SPRING_BOOT: 'org.springframework.boot:spring-boot-gradle-plugin:2.3.1.RELEASE', // for Spring Boot Gradle extension + SPRING_BOOT: 'org.springframework.boot:spring-boot-gradle-plugin:2.4.0', // for Spring Boot Gradle extension MAVEN_API: 'org.apache.maven:maven-plugin-api:3.8.2', //test diff --git a/first-party/jib-spring-boot-extension-maven/README.md b/first-party/jib-spring-boot-extension-maven/README.md index 6e418fa..a9bbb96 100644 --- a/first-party/jib-spring-boot-extension-maven/README.md +++ b/first-party/jib-spring-boot-extension-maven/README.md @@ -2,9 +2,9 @@ Provides extra support for Spring Boot applications. As of now, this extension provides the following functionalities: -- Including and excluding `spring-boot-devtools` +- Including and excluding `spring-boot-devtools` and / or `spring-boot-docker-compose` - Handles the [Spring Boot developer tools issue](https://github.com/GoogleContainerTools/jib/issues/2336) that Jib always (correctly) packages the [`spring-boot-devtools`](https://docs.spring.io/spring-boot/docs/current/reference/html/using-spring-boot.html#using-boot-devtools) dependency. Applying this extension makes Jib include or exclude the dependency in the same way Spring Boot does for their repackaged fat JAR. For example, Spring Boot by default excludes `spring-boot-devtools` from the repackaged JAR, so the extension by default excludes it from an image too. On the other hand, if you set `false` in Spring Boot, the extension does nothing (keeps the dependency in the image). + Handles the [Spring Boot issue](https://github.com/GoogleContainerTools/jib/issues/2336) that Jib always (correctly) packages [optional dependencies](https://docs.spring.io/spring-boot/docs/current/reference/html/using-spring-boot.html#using-boot-devtools). Applying this extension makes Jib include or exclude these dependencies in the same way Spring Boot does for their repackaged fat JAR. For example, Spring Boot by default excludes `spring-boot-devtools` and `spring-boot-docker-compose` from the repackaged JAR, so the extension by default excludes them from an image too. On the other hand, if you set `false` or `false` in Spring Boot, the extension keeps those dependencies in the image. Note that one can still properly and correctly resolve this "issue" without this extension, for example, by setting up two Maven profiles, as explained in the issue link above. @@ -22,7 +22,7 @@ Check out the [genenal instructions](../../README.md#using-jib-plugin-extensions com.google.cloud.tools jib-spring-boot-extension-maven - 0.1.0 + 0.5.0 @@ -30,7 +30,10 @@ Check out the [genenal instructions](../../README.md#using-jib-plugin-extensions ... - com.google.cloud.tools.jib.maven.extension.springboot.JibSpringBootExtension + com.google.cloud.tools.jib.maven.extension.springboot.JibSpringBootDevtoolsExtension + + + com.google.cloud.tools.jib.maven.extension.springboot.JibSpringBootDockerComposeExtension diff --git a/first-party/jib-spring-boot-extension-maven/src/main/java/com/google/cloud/tools/jib/maven/extension/springboot/JibSpringBootDevtoolsExtension.java b/first-party/jib-spring-boot-extension-maven/src/main/java/com/google/cloud/tools/jib/maven/extension/springboot/JibSpringBootDevtoolsExtension.java new file mode 100644 index 0000000..4e7ac10 --- /dev/null +++ b/first-party/jib-spring-boot-extension-maven/src/main/java/com/google/cloud/tools/jib/maven/extension/springboot/JibSpringBootDevtoolsExtension.java @@ -0,0 +1,30 @@ +/* + * Copyright 2020 Google LLC. + * + * 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 + * + * http://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 com.google.cloud.tools.jib.maven.extension.springboot; + +public class JibSpringBootDevtoolsExtension implements JibSpringBootModuleExtension { + + @Override + public String getModuleName() { + return "spring-boot-devtools"; + } + + @Override + public String getExcludePropertyName() { + return "excludeDevtools"; + } +} diff --git a/first-party/jib-spring-boot-extension-maven/src/main/java/com/google/cloud/tools/jib/maven/extension/springboot/JibSpringBootDockerComposeExtension.java b/first-party/jib-spring-boot-extension-maven/src/main/java/com/google/cloud/tools/jib/maven/extension/springboot/JibSpringBootDockerComposeExtension.java new file mode 100644 index 0000000..4084275 --- /dev/null +++ b/first-party/jib-spring-boot-extension-maven/src/main/java/com/google/cloud/tools/jib/maven/extension/springboot/JibSpringBootDockerComposeExtension.java @@ -0,0 +1,30 @@ +/* + * Copyright 2020 Google LLC. + * + * 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 + * + * http://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 com.google.cloud.tools.jib.maven.extension.springboot; + +public class JibSpringBootDockerComposeExtension implements JibSpringBootModuleExtension { + + @Override + public String getModuleName() { + return "spring-boot-docker-compose"; + } + + @Override + public String getExcludePropertyName() { + return "excludeDockerCompose"; + } +} diff --git a/first-party/jib-spring-boot-extension-maven/src/main/java/com/google/cloud/tools/jib/maven/extension/springboot/JibSpringBootExtension.java b/first-party/jib-spring-boot-extension-maven/src/main/java/com/google/cloud/tools/jib/maven/extension/springboot/JibSpringBootModuleExtension.java similarity index 67% rename from first-party/jib-spring-boot-extension-maven/src/main/java/com/google/cloud/tools/jib/maven/extension/springboot/JibSpringBootExtension.java rename to first-party/jib-spring-boot-extension-maven/src/main/java/com/google/cloud/tools/jib/maven/extension/springboot/JibSpringBootModuleExtension.java index 14708b7..a3c4687 100644 --- a/first-party/jib-spring-boot-extension-maven/src/main/java/com/google/cloud/tools/jib/maven/extension/springboot/JibSpringBootExtension.java +++ b/first-party/jib-spring-boot-extension-maven/src/main/java/com/google/cloud/tools/jib/maven/extension/springboot/JibSpringBootModuleExtension.java @@ -25,75 +25,69 @@ import com.google.cloud.tools.jib.maven.extension.MavenData; import com.google.cloud.tools.jib.plugins.extension.ExtensionLogger; import com.google.cloud.tools.jib.plugins.extension.ExtensionLogger.LogLevel; -import com.google.cloud.tools.jib.plugins.extension.JibPluginExtensionException; -import com.google.common.annotations.VisibleForTesting; +import org.apache.maven.model.Plugin; +import org.apache.maven.project.MavenProject; +import org.codehaus.plexus.util.xml.Xpp3Dom; + import java.io.File; import java.util.List; import java.util.Map; import java.util.Optional; import java.util.function.Predicate; import java.util.stream.Collectors; -import org.apache.maven.model.Plugin; -import org.apache.maven.project.MavenProject; -import org.codehaus.plexus.util.xml.Xpp3Dom; -public class JibSpringBootExtension implements JibMavenPluginExtension { +public interface JibSpringBootModuleExtension extends JibMavenPluginExtension { @Override - public Optional> getExtraConfigType() { + default Optional> getExtraConfigType() { return Optional.empty(); } + String getModuleName(); + String getExcludePropertyName(); + @Override - public ContainerBuildPlan extendContainerBuildPlan( + default ContainerBuildPlan extendContainerBuildPlan( ContainerBuildPlan buildPlan, Map properties, Optional config, MavenData mavenData, - ExtensionLogger logger) - throws JibPluginExtensionException { - logger.log(LogLevel.LIFECYCLE, "Running Jib Spring Boot extension"); + ExtensionLogger logger) { + logger.log(LogLevel.LIFECYCLE, "Running Jib Spring Boot extension for module " + getModuleName()); - if (!shouldExcludeDevtools(mavenData.getMavenProject(), logger)) { - logger.log(LogLevel.INFO, "Keeping spring-boot-devtools (if any)"); + if (!shouldExcludeModule(mavenData.getMavenProject(), logger)) { + logger.log(LogLevel.INFO, "Keeping " + getModuleName() + " (if any)"); return buildPlan; } - logger.log(LogLevel.INFO, "Removing spring-boot-devtools (if any)"); + logger.log(LogLevel.INFO, "Removing " + getModuleName() + " (if any)"); List newLayers = buildPlan.getLayers().stream() - .map(JibSpringBootExtension::filterOutDevtools) + .map(this::filterOutModule) .collect(Collectors.toList()); return buildPlan.toBuilder().setLayers(newLayers).build(); } - @VisibleForTesting - static boolean isDevtoolsJar(File file) { - return file.getName().startsWith("spring-boot-devtools-") && file.getName().endsWith(".jar"); - } - - @VisibleForTesting - static boolean shouldExcludeDevtools(MavenProject project, ExtensionLogger logger) { + default boolean shouldExcludeModule(MavenProject project, ExtensionLogger logger) { Plugin bootPlugin = project.getPlugin("org.springframework.boot:spring-boot-maven-plugin"); if (bootPlugin == null) { logger.log( - LogLevel.WARN, - "Jib Spring Boot extension: project doesn't have spring-boot-maven-plugin?"); + LogLevel.WARN, + "Jib Spring Boot extension: project doesn't have spring-boot-maven-plugin?"); return true; } Xpp3Dom configuration = (Xpp3Dom) bootPlugin.getConfiguration(); if (configuration != null) { - Xpp3Dom excludeDevtools = configuration.getChild("excludeDevtools"); + Xpp3Dom excludeDevtools = configuration.getChild(getExcludePropertyName()); if (excludeDevtools != null) { return "true".equalsIgnoreCase(excludeDevtools.getValue()); } } - return true; // Spring Boot's default is true. + return true; // Spring Boot's exclude property default is true. } - @VisibleForTesting - static LayerObject filterOutDevtools(LayerObject layerObject) { + default LayerObject filterOutModule(LayerObject layerObject) { String dependencyLayerName = JavaContainerBuilder.LayerType.DEPENDENCIES.getName(); if (!dependencyLayerName.equals(layerObject.getName())) { return layerObject; @@ -101,9 +95,13 @@ static LayerObject filterOutDevtools(LayerObject layerObject) { FileEntriesLayer layer = (FileEntriesLayer) layerObject; Predicate notDevtoolsJar = - fileEntry -> !isDevtoolsJar(fileEntry.getSourceFile().toFile()); + fileEntry -> !isModuleJar(fileEntry.getSourceFile().toFile()); List newEntries = layer.getEntries().stream().filter(notDevtoolsJar).collect(Collectors.toList()); return layer.toBuilder().setEntries(newEntries).build(); } + + default boolean isModuleJar(File file) { + return file.getName().startsWith(getModuleName() + "-") && file.getName().endsWith(".jar"); + } } diff --git a/first-party/jib-spring-boot-extension-maven/src/main/resources/META-INF/services/com.google.cloud.tools.jib.maven.extension.JibMavenPluginExtension b/first-party/jib-spring-boot-extension-maven/src/main/resources/META-INF/services/com.google.cloud.tools.jib.maven.extension.JibMavenPluginExtension index 2e5b8cd..a61a670 100644 --- a/first-party/jib-spring-boot-extension-maven/src/main/resources/META-INF/services/com.google.cloud.tools.jib.maven.extension.JibMavenPluginExtension +++ b/first-party/jib-spring-boot-extension-maven/src/main/resources/META-INF/services/com.google.cloud.tools.jib.maven.extension.JibMavenPluginExtension @@ -1 +1 @@ -com.google.cloud.tools.jib.maven.extension.springboot.JibSpringBootExtension \ No newline at end of file +com.google.cloud.tools.jib.maven.extension.springboot.JibSpringBootDevtoolsExtension diff --git a/first-party/jib-spring-boot-extension-maven/src/test/java/com/google/cloud/tools/jib/maven/extension/springboot/JibSpringBootExtensionTest.java b/first-party/jib-spring-boot-extension-maven/src/test/java/com/google/cloud/tools/jib/maven/extension/springboot/JibSpringBootModuleExtensionTest.java similarity index 60% rename from first-party/jib-spring-boot-extension-maven/src/test/java/com/google/cloud/tools/jib/maven/extension/springboot/JibSpringBootExtensionTest.java rename to first-party/jib-spring-boot-extension-maven/src/test/java/com/google/cloud/tools/jib/maven/extension/springboot/JibSpringBootModuleExtensionTest.java index b671f3c..8113f15 100644 --- a/first-party/jib-spring-boot-extension-maven/src/test/java/com/google/cloud/tools/jib/maven/extension/springboot/JibSpringBootExtensionTest.java +++ b/first-party/jib-spring-boot-extension-maven/src/test/java/com/google/cloud/tools/jib/maven/extension/springboot/JibSpringBootModuleExtensionTest.java @@ -16,13 +16,6 @@ package com.google.cloud.tools.jib.maven.extension.springboot; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertFalse; -import static org.junit.Assert.assertSame; -import static org.junit.Assert.assertTrue; -import static org.mockito.Mockito.verify; -import static org.mockito.Mockito.when; - import com.google.cloud.tools.jib.api.buildplan.AbsoluteUnixPath; import com.google.cloud.tools.jib.api.buildplan.ContainerBuildPlan; import com.google.cloud.tools.jib.api.buildplan.FileEntriesLayer; @@ -30,14 +23,6 @@ import com.google.cloud.tools.jib.maven.extension.MavenData; import com.google.cloud.tools.jib.plugins.extension.ExtensionLogger; import com.google.cloud.tools.jib.plugins.extension.ExtensionLogger.LogLevel; -import com.google.cloud.tools.jib.plugins.extension.JibPluginExtensionException; -import java.io.File; -import java.nio.file.Path; -import java.nio.file.Paths; -import java.util.Arrays; -import java.util.List; -import java.util.Optional; -import java.util.stream.Collectors; import org.apache.maven.model.Plugin; import org.apache.maven.project.MavenProject; import org.codehaus.plexus.util.xml.Xpp3Dom; @@ -47,9 +32,21 @@ import org.mockito.Mock; import org.mockito.junit.MockitoJUnitRunner; -/** Tests for {@link JibSpringBootExtension}. */ +import java.io.File; +import java.nio.file.Path; +import java.nio.file.Paths; +import java.util.Arrays; +import java.util.List; +import java.util.Optional; +import java.util.stream.Collectors; + +import static org.junit.Assert.*; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; + +/** Tests for {@link JibSpringBootModuleExtension}. */ @RunWith(MockitoJUnitRunner.class) -public class JibSpringBootExtensionTest { +public class JibSpringBootModuleExtensionTest { @Mock private MavenData mavenData; @Mock private ExtensionLogger logger; @@ -57,6 +54,18 @@ public class JibSpringBootExtensionTest { @Mock private MavenProject project; @Mock private Plugin bootPlugin; + private final JibSpringBootModuleExtension extension = new JibSpringBootModuleExtension() { + @Override + public String getModuleName() { + return "spring-boot-module"; + } + + @Override + public String getExcludePropertyName() { + return "excludeModule"; + } + }; + private static FileEntriesLayer buildLayer(String layerName, Path... paths) { FileEntriesLayer.Builder builder = FileEntriesLayer.builder().setName(layerName); for (Path path : paths) { @@ -77,26 +86,26 @@ public void setUp() { } @Test - public void testIsDevtoolsJar() { - File file = Paths.get("sub", "folder", "spring-boot-devtools-1.2.3-SNAPSHOT.jar").toFile(); - assertTrue(JibSpringBootExtension.isDevtoolsJar(file)); + public void testIsModuleJar() { + File file = Paths.get("sub", "folder", "spring-boot-module-1.2.3-SNAPSHOT.jar").toFile(); + assertTrue(extension.isModuleJar(file)); } @Test - public void testIsDevtoolsJar_noJarExtension() { - File file = Paths.get("sub", "folder", "spring-boot-devtools-1.2.3-SNAPSHOT").toFile(); - assertFalse(JibSpringBootExtension.isDevtoolsJar(file)); + public void testIsModuleJar_noJarExtension() { + File file = Paths.get("sub", "folder", "spring-boot-module-1.2.3-SNAPSHOT").toFile(); + assertFalse(extension.isModuleJar(file)); } @Test - public void testIsDevtoolsJar_differentJar() { - File file = Paths.get("sub", "folder", "not-spring-boot-devtools-1.2.3-SNAPSHOT.jar").toFile(); - assertFalse(JibSpringBootExtension.isDevtoolsJar(file)); + public void testIsModuleJar_differentJar() { + File file = Paths.get("sub", "folder", "not-spring-boot-module-1.2.3-SNAPSHOT.jar").toFile(); + assertFalse(extension.isModuleJar(file)); } @Test - public void testShouldExcludeDevtools_noSpringBootPlugin() { - assertTrue(JibSpringBootExtension.shouldExcludeDevtools(project, logger)); + public void testShouldExcludeModule_noSpringBootPlugin() { + assertTrue(extension.shouldExcludeModule(project, logger)); verify(logger) .log( @@ -105,84 +114,83 @@ public void testShouldExcludeDevtools_noSpringBootPlugin() { } @Test - public void testShouldExcludeDevtools_trueByDefault() { + public void testShouldExcludeModule_trueByDefault() { when(project.getPlugin("org.springframework.boot:spring-boot-maven-plugin")) .thenReturn(bootPlugin); - assertTrue(JibSpringBootExtension.shouldExcludeDevtools(project, logger)); + assertTrue(extension.shouldExcludeModule(project, logger)); } @Test - public void testShouldExcludeDevtools_false() { + public void testShouldExcludeMOdule_false() { Xpp3Dom configuration = new Xpp3Dom("configuration"); - Xpp3Dom excludeDevtools = new Xpp3Dom("excludeDevtools"); - excludeDevtools.setValue("FaLsE"); - configuration.addChild(excludeDevtools); + Xpp3Dom excludeModule = new Xpp3Dom("excludeModule"); + excludeModule.setValue("FaLsE"); + configuration.addChild(excludeModule); when(project.getPlugin("org.springframework.boot:spring-boot-maven-plugin")) .thenReturn(bootPlugin); when(bootPlugin.getConfiguration()).thenReturn(configuration); - assertFalse(JibSpringBootExtension.shouldExcludeDevtools(project, logger)); + assertFalse(extension.shouldExcludeModule(project, logger)); } @Test - public void testShouldExcludeDevtools_true() { + public void testShouldExcludeModule_true() { Xpp3Dom configuration = new Xpp3Dom("configuration"); - Xpp3Dom excludeDevtools = new Xpp3Dom("excludeDevtools"); - excludeDevtools.setValue("tRuE"); - configuration.addChild(excludeDevtools); + Xpp3Dom excludeModule = new Xpp3Dom("excludeModule"); + excludeModule.setValue("tRuE"); + configuration.addChild(excludeModule); when(project.getPlugin("org.springframework.boot:spring-boot-maven-plugin")) .thenReturn(bootPlugin); when(bootPlugin.getConfiguration()).thenReturn(configuration); - assertTrue(JibSpringBootExtension.shouldExcludeDevtools(project, logger)); + assertTrue(extension.shouldExcludeModule(project, logger)); } @Test - public void testFilterOutDevtools() { + public void testFilterOutModule() { FileEntriesLayer layer = buildLayer( "dependencies", Paths.get("static").resolve("foo.txt"), - Paths.get("lib").resolve("spring-boot-devtools-1.2.3.jar"), + Paths.get("lib").resolve("spring-boot-module-1.2.3.jar"), Paths.get("archive").resolve("bar.zip")); - FileEntriesLayer filtered = (FileEntriesLayer) JibSpringBootExtension.filterOutDevtools(layer); + FileEntriesLayer filtered = (FileEntriesLayer) extension.filterOutModule(layer); assertEquals(Arrays.asList("/dest/foo.txt", "/dest/bar.zip"), layerToExtractionPaths(filtered)); } @Test - public void testFilterOutDevtools_differentDependencyLayerName() { + public void testFilterOutModule_differentDependencyLayerName() { FileEntriesLayer layer = buildLayer( "NOT dependencies", - Paths.get("lib").resolve("spring-boot-devtools-1.2.3.jar"), + Paths.get("lib").resolve("spring-boot-module-1.2.3.jar"), Paths.get("archive").resolve("bar.zip")); - LayerObject newLayer = JibSpringBootExtension.filterOutDevtools(layer); + LayerObject newLayer = extension.filterOutModule(layer); assertSame(layer, newLayer); assertEquals(layer.getEntries(), ((FileEntriesLayer) newLayer).getEntries()); } @Test - public void testExtendContainerBuildPlan_devtoolsFiltered() throws JibPluginExtensionException { + public void testExtendContainerBuildPlan_moduleFiltered() { when(project.getPlugin("org.springframework.boot:spring-boot-maven-plugin")) .thenReturn(bootPlugin); FileEntriesLayer layer1 = buildLayer( "dependencies", - Paths.get("spring-boot-devtools-1.2.3.jar"), + Paths.get("spring-boot-module-1.2.3.jar"), Paths.get("archive").resolve("bar.zip")); FileEntriesLayer layer2 = - buildLayer("NOT dependencies", Paths.get("spring-boot-devtools-1.2.3.jar")); + buildLayer("NOT dependencies", Paths.get("spring-boot-module-1.2.3.jar")); ContainerBuildPlan buildPlan = ContainerBuildPlan.builder().addLayer(layer1).addLayer(layer2).build(); ContainerBuildPlan newPlan = - new JibSpringBootExtension() - .extendContainerBuildPlan(buildPlan, null, Optional.empty(), mavenData, logger); + extension.extendContainerBuildPlan(buildPlan, null, Optional.empty(), mavenData, logger); assertEquals(2, newPlan.getLayers().size()); FileEntriesLayer newLayer1 = (FileEntriesLayer) newPlan.getLayers().get(0); @@ -190,18 +198,18 @@ public void testExtendContainerBuildPlan_devtoolsFiltered() throws JibPluginExte assertEquals(Arrays.asList("/dest/bar.zip"), layerToExtractionPaths(newLayer1)); assertEquals( - Arrays.asList("/dest/spring-boot-devtools-1.2.3.jar"), layerToExtractionPaths(newLayer2)); + Arrays.asList("/dest/spring-boot-module-1.2.3.jar"), layerToExtractionPaths(newLayer2)); - verify(logger).log(LogLevel.INFO, "Removing spring-boot-devtools (if any)"); + verify(logger).log(LogLevel.INFO, "Removing spring-boot-module (if any)"); } @Test - public void testExtendContainerBuildPlan_noFiltering() throws JibPluginExtensionException { - // set up false (no filtering required) + public void testExtendContainerBuildPlan_noFiltering() { + // set up false (no filtering required) Xpp3Dom configuration = new Xpp3Dom("configuration"); - Xpp3Dom excludeDevtools = new Xpp3Dom("excludeDevtools"); - excludeDevtools.setValue("false"); - configuration.addChild(excludeDevtools); + Xpp3Dom excludeModule = new Xpp3Dom("excludeModule"); + excludeModule.setValue("false"); + configuration.addChild(excludeModule); when(project.getPlugin("org.springframework.boot:spring-boot-maven-plugin")) .thenReturn(bootPlugin); @@ -210,18 +218,17 @@ public void testExtendContainerBuildPlan_noFiltering() throws JibPluginExtension FileEntriesLayer layer1 = buildLayer( "dependencies", - Paths.get("spring-boot-devtools-1.2.3.jar"), + Paths.get("spring-boot-module-1.2.3.jar"), Paths.get("archive").resolve("bar.zip")); FileEntriesLayer layer2 = - buildLayer("NOT dependencies", Paths.get("spring-boot-devtools-1.2.3.jar")); + buildLayer("NOT dependencies", Paths.get("spring-boot-module-1.2.3.jar")); ContainerBuildPlan buildPlan = ContainerBuildPlan.builder().addLayer(layer1).addLayer(layer2).build(); ContainerBuildPlan newPlan = - new JibSpringBootExtension() - .extendContainerBuildPlan(buildPlan, null, Optional.empty(), mavenData, logger); + extension.extendContainerBuildPlan(buildPlan, null, Optional.empty(), mavenData, logger); assertSame(buildPlan, newPlan); - verify(logger).log(LogLevel.INFO, "Keeping spring-boot-devtools (if any)"); + verify(logger).log(LogLevel.INFO, "Keeping spring-boot-module (if any)"); } } From 121ffc26687d83081fc019220cbc70beae0846c1 Mon Sep 17 00:00:00 2001 From: Dave Franken Date: Tue, 22 Aug 2023 10:44:11 +0200 Subject: [PATCH 2/3] Exclude spring-boot-docker-compose from image. Fixes #158 --- first-party/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/first-party/build.gradle b/first-party/build.gradle index 8dfdf86..78775c4 100644 --- a/first-party/build.gradle +++ b/first-party/build.gradle @@ -59,7 +59,7 @@ subprojects { JIB_GRADLE_EXTENSION: 'com.google.cloud.tools:jib-gradle-plugin-extension-api:0.4.0', JIB_MAVEN_EXTENSION: 'com.google.cloud.tools:jib-maven-plugin-extension-api:0.4.0', - SPRING_BOOT: 'org.springframework.boot:spring-boot-gradle-plugin:2.4.0', // for Spring Boot Gradle extension + SPRING_BOOT: 'org.springframework.boot:spring-boot-gradle-plugin:2.3.1.RELEASE', // for Spring Boot Gradle extension MAVEN_API: 'org.apache.maven:maven-plugin-api:3.8.2', //test From 9cf4d8271e1ddce64f25f45d025a6b8bf70f4140 Mon Sep 17 00:00:00 2001 From: Davio Date: Tue, 22 Aug 2023 10:44:11 +0200 Subject: [PATCH 3/3] Exclude spring-boot-docker-compose from image. Fixes #158 --- first-party/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/first-party/build.gradle b/first-party/build.gradle index 8dfdf86..78775c4 100644 --- a/first-party/build.gradle +++ b/first-party/build.gradle @@ -59,7 +59,7 @@ subprojects { JIB_GRADLE_EXTENSION: 'com.google.cloud.tools:jib-gradle-plugin-extension-api:0.4.0', JIB_MAVEN_EXTENSION: 'com.google.cloud.tools:jib-maven-plugin-extension-api:0.4.0', - SPRING_BOOT: 'org.springframework.boot:spring-boot-gradle-plugin:2.4.0', // for Spring Boot Gradle extension + SPRING_BOOT: 'org.springframework.boot:spring-boot-gradle-plugin:2.3.1.RELEASE', // for Spring Boot Gradle extension MAVEN_API: 'org.apache.maven:maven-plugin-api:3.8.2', //test