diff --git a/jib-gradle-plugin-extension-api/src/main/java/com/google/cloud/tools/jib/gradle/extension/JibGradlePluginExtension.java b/jib-gradle-plugin-extension-api/src/main/java/com/google/cloud/tools/jib/gradle/extension/JibGradlePluginExtension.java index 1f99465e1d..9c13e2975b 100644 --- a/jib-gradle-plugin-extension-api/src/main/java/com/google/cloud/tools/jib/gradle/extension/JibGradlePluginExtension.java +++ b/jib-gradle-plugin-extension-api/src/main/java/com/google/cloud/tools/jib/gradle/extension/JibGradlePluginExtension.java @@ -20,6 +20,7 @@ import com.google.cloud.tools.jib.plugins.extension.ExtensionLogger; import com.google.cloud.tools.jib.plugins.extension.JibPluginExtension; import com.google.cloud.tools.jib.plugins.extension.JibPluginExtensionException; +import java.util.Map; /** * Jib Gradle plugin extension API. @@ -34,12 +35,16 @@ public interface JibGradlePluginExtension extends JibPluginExtension { * Extends the build plan prepared by the Jib Gradle plugin. * * @param buildPlan original build plan prepared by the Jib Gradle plugin + * @param properties custom properties configured for the plugin extension * @param gradleData {@link GradleData} providing Gradle-specific data and properties * @param logger logger for writing log messages * @return updated build plan * @throws JibPluginExtensionException if an error occurs while running the plugin extension */ ContainerBuildPlan extendContainerBuildPlan( - ContainerBuildPlan buildPlan, GradleData gradleData, ExtensionLogger logger) + ContainerBuildPlan buildPlan, + Map properties, + GradleData gradleData, + ExtensionLogger logger) throws JibPluginExtensionException; } diff --git a/jib-gradle-plugin/src/main/java/com/google/cloud/tools/jib/gradle/ExtensionParameters.java b/jib-gradle-plugin/src/main/java/com/google/cloud/tools/jib/gradle/ExtensionParameters.java new file mode 100644 index 0000000000..2f5098edd3 --- /dev/null +++ b/jib-gradle-plugin/src/main/java/com/google/cloud/tools/jib/gradle/ExtensionParameters.java @@ -0,0 +1,55 @@ +/* + * 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.gradle; + +import com.google.cloud.tools.jib.plugins.common.RawConfiguration.ExtensionConfiguration; +import java.util.Collections; +import java.util.Map; +import org.gradle.api.tasks.Input; +import org.gradle.api.tasks.Internal; + +/** Configuration of a plugin extension. */ +public class ExtensionParameters implements ExtensionConfiguration { + + private String implementation = ""; + private Map properties = Collections.emptyMap(); + + @Input + public String getImplementation() { + return getExtensionClass(); + } + + @Internal + @Override + public String getExtensionClass() { + return implementation; + } + + public void setImplementation(String implementation) { + this.implementation = implementation; + } + + @Input + @Override + public Map getProperties() { + return properties; + } + + public void setProperties(Map properties) { + this.properties = properties; + } +} diff --git a/jib-gradle-plugin/src/main/java/com/google/cloud/tools/jib/gradle/ExtensionParametersSpec.java b/jib-gradle-plugin/src/main/java/com/google/cloud/tools/jib/gradle/ExtensionParametersSpec.java new file mode 100644 index 0000000000..9971e1a6da --- /dev/null +++ b/jib-gradle-plugin/src/main/java/com/google/cloud/tools/jib/gradle/ExtensionParametersSpec.java @@ -0,0 +1,47 @@ +/* + * 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.gradle; + +import javax.inject.Inject; +import org.gradle.api.Action; +import org.gradle.api.Project; +import org.gradle.api.provider.ListProperty; + +/** Allows to add {@link ExtensionParameters} objects to the list property of the same type. */ +public class ExtensionParametersSpec { + + private final Project project; + private final ListProperty pluginExtensions; + + @Inject + public ExtensionParametersSpec( + Project project, ListProperty pluginExtensions) { + this.project = project; + this.pluginExtensions = pluginExtensions; + } + + /** + * Adds a new plugin extension configuration to the extensions list. + * + * @param action closure representing an extension configuration + */ + public void pluginExtension(Action action) { + ExtensionParameters extension = project.getObjects().newInstance(ExtensionParameters.class); + action.execute(extension); + pluginExtensions.add(extension); + } +} diff --git a/jib-gradle-plugin/src/main/java/com/google/cloud/tools/jib/gradle/GradleProjectProperties.java b/jib-gradle-plugin/src/main/java/com/google/cloud/tools/jib/gradle/GradleProjectProperties.java index 6f469a75e5..3436442f7a 100644 --- a/jib-gradle-plugin/src/main/java/com/google/cloud/tools/jib/gradle/GradleProjectProperties.java +++ b/jib-gradle-plugin/src/main/java/com/google/cloud/tools/jib/gradle/GradleProjectProperties.java @@ -16,6 +16,7 @@ package com.google.cloud.tools.jib.gradle; +import com.google.api.client.util.Lists; import com.google.cloud.tools.jib.api.Containerizer; import com.google.cloud.tools.jib.api.ImageReference; import com.google.cloud.tools.jib.api.InvalidImageReferenceException; @@ -50,9 +51,9 @@ import java.nio.file.Paths; import java.time.Duration; import java.util.ArrayList; -import java.util.Iterator; import java.util.List; import java.util.ServiceLoader; +import java.util.function.Predicate; import java.util.stream.Collectors; import javax.annotation.Nullable; import org.apache.tools.ant.taskdefs.condition.Os; @@ -401,16 +402,19 @@ public JibContainerBuilder runPluginExtensions( List extensionConfigs, JibContainerBuilder jibContainerBuilder) throws JibPluginExtensionException { - return runPluginExtensions( - ServiceLoader.load(JibGradlePluginExtension.class).iterator(), jibContainerBuilder); + List services = + Lists.newArrayList(ServiceLoader.load(JibGradlePluginExtension.class).iterator()); + return runPluginExtensions(services, extensionConfigs, jibContainerBuilder); } @VisibleForTesting JibContainerBuilder runPluginExtensions( - Iterator services, JibContainerBuilder jibContainerBuilder) + List services, + List extensionConfigs, + JibContainerBuilder jibContainerBuilder) throws JibPluginExtensionException { - if (!services.hasNext()) { - log(LogEvent.debug("No Jib plugin extensions discovered")); + if (extensionConfigs.isEmpty()) { + log(LogEvent.debug("No Jib plugin extensions configured to load")); return jibContainerBuilder; } @@ -418,10 +422,20 @@ JibContainerBuilder runPluginExtensions( ContainerBuildPlan buildPlan = jibContainerBuilder.toContainerBuildPlan(); GradleExtensionLogger extensionLogger = new GradleExtensionLogger(this::log); try { - while (services.hasNext()) { - extension = services.next(); - log(LogEvent.lifecycle("Running extension: " + extension.getClass().getName())); - buildPlan = extension.extendContainerBuildPlan(buildPlan, () -> project, extensionLogger); + for (ExtensionConfiguration config : extensionConfigs) { + String extensionClass = config.getExtensionClass(); + extension = findConfiguredExtension(services, extensionClass); + if (extension == null) { + throw new JibPluginExtensionException( + JibGradlePluginExtension.class, + "extension configured but not discovered on Jib runtime classpath: " + + extensionClass); + } + + log(LogEvent.lifecycle("Running extension: " + extensionClass)); + buildPlan = + extension.extendContainerBuildPlan( + buildPlan, config.getProperties(), () -> project, extensionLogger); ImageReference.parse(buildPlan.getBaseImage()); // to validate image reference } return jibContainerBuilder.applyContainerBuildPlan(buildPlan); @@ -433,4 +447,12 @@ JibContainerBuilder runPluginExtensions( ex); } } + + @Nullable + private JibGradlePluginExtension findConfiguredExtension( + List extensions, String extensionClass) { + Predicate matchesClassName = + extension -> extension.getClass().getName().equals(extensionClass); + return extensions.stream().filter(matchesClassName).findFirst().orElse(null); + } } diff --git a/jib-gradle-plugin/src/main/java/com/google/cloud/tools/jib/gradle/GradleRawConfiguration.java b/jib-gradle-plugin/src/main/java/com/google/cloud/tools/jib/gradle/GradleRawConfiguration.java index 8704c38691..72b5aa5a28 100644 --- a/jib-gradle-plugin/src/main/java/com/google/cloud/tools/jib/gradle/GradleRawConfiguration.java +++ b/jib-gradle-plugin/src/main/java/com/google/cloud/tools/jib/gradle/GradleRawConfiguration.java @@ -22,7 +22,6 @@ import com.google.cloud.tools.jib.plugins.common.AuthProperty; import com.google.cloud.tools.jib.plugins.common.RawConfiguration; import java.nio.file.Path; -import java.util.Collections; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; @@ -209,6 +208,6 @@ public Path getImageJsonOutputPath() { @Override public List getPluginExtensions() { - return Collections.emptyList(); + return jibExtension.getPluginExtensions().get(); } } diff --git a/jib-gradle-plugin/src/main/java/com/google/cloud/tools/jib/gradle/JibExtension.java b/jib-gradle-plugin/src/main/java/com/google/cloud/tools/jib/gradle/JibExtension.java index 149e1deb4e..6b85f6aa01 100644 --- a/jib-gradle-plugin/src/main/java/com/google/cloud/tools/jib/gradle/JibExtension.java +++ b/jib-gradle-plugin/src/main/java/com/google/cloud/tools/jib/gradle/JibExtension.java @@ -21,6 +21,7 @@ import org.gradle.api.Action; import org.gradle.api.Project; import org.gradle.api.model.ObjectFactory; +import org.gradle.api.provider.ListProperty; import org.gradle.api.provider.Property; import org.gradle.api.tasks.Input; import org.gradle.api.tasks.Nested; @@ -63,6 +64,12 @@ * } * allowInsecureRegistries = false * containerizingMode = 'exploded' + * pluginExtensions { + * pluginExtension { + * implementation = 'com.example.ThirdPartyJibGradleExtension' + * properties = [customKey: 'value] + * } + * } * } * } */ @@ -81,6 +88,8 @@ public class JibExtension { private final SkaffoldParameters skaffold; private final Property allowInsecureRegistries; private final Property containerizingMode; + private final ListProperty pluginExtensions; + private final ExtensionParametersSpec extensionParametersSpec; /** * Should be called using {@link org.gradle.api.plugins.ExtensionContainer#create}. @@ -98,6 +107,9 @@ public JibExtension(Project project) { outputPaths = objectFactory.newInstance(OutputPathsParameters.class, project); skaffold = objectFactory.newInstance(SkaffoldParameters.class, project); + pluginExtensions = objectFactory.listProperty(ExtensionParameters.class).empty(); + extensionParametersSpec = + objectFactory.newInstance(ExtensionParametersSpec.class, project, pluginExtensions); allowInsecureRegistries = objectFactory.property(Boolean.class); containerizingMode = objectFactory.property(String.class); @@ -134,6 +146,10 @@ public void skaffold(Action action) { action.execute(skaffold); } + public void pluginExtensions(Action action) { + action.execute(extensionParametersSpec); + } + public void setAllowInsecureRegistries(boolean allowInsecureRegistries) { this.allowInsecureRegistries.set(allowInsecureRegistries); } @@ -198,4 +214,10 @@ public String getContainerizingMode() { String property = System.getProperty(PropertyNames.CONTAINERIZING_MODE); return property != null ? property : containerizingMode.get(); } + + @Nested + @Optional + public ListProperty getPluginExtensions() { + return pluginExtensions; + } } diff --git a/jib-gradle-plugin/src/test/java/com/google/cloud/tools/jib/gradle/GradleProjectPropertiesExtensionTest.java b/jib-gradle-plugin/src/test/java/com/google/cloud/tools/jib/gradle/GradleProjectPropertiesExtensionTest.java index cb321ea23a..2f25097369 100644 --- a/jib-gradle-plugin/src/test/java/com/google/cloud/tools/jib/gradle/GradleProjectPropertiesExtensionTest.java +++ b/jib-gradle-plugin/src/test/java/com/google/cloud/tools/jib/gradle/GradleProjectPropertiesExtensionTest.java @@ -19,22 +19,27 @@ import com.google.cloud.tools.jib.api.InvalidImageReferenceException; import com.google.cloud.tools.jib.api.Jib; import com.google.cloud.tools.jib.api.JibContainerBuilder; +import com.google.cloud.tools.jib.api.buildplan.ContainerBuildPlan; import com.google.cloud.tools.jib.filesystem.TempDirectoryProvider; +import com.google.cloud.tools.jib.gradle.extension.GradleData; import com.google.cloud.tools.jib.gradle.extension.JibGradlePluginExtension; +import com.google.cloud.tools.jib.plugins.common.RawConfiguration.ExtensionConfiguration; +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.collect.ImmutableMap; import java.io.FileNotFoundException; import java.util.Arrays; import java.util.Collections; +import java.util.List; +import java.util.Map; import org.gradle.api.Project; import org.gradle.api.logging.Logger; import org.gradle.api.logging.configuration.ConsoleOutput; import org.hamcrest.CoreMatchers; import org.junit.Assert; import org.junit.Before; -import org.junit.Rule; import org.junit.Test; -import org.junit.rules.TemporaryFolder; import org.junit.runner.RunWith; import org.mockito.Answers; import org.mockito.Mock; @@ -45,7 +50,64 @@ @RunWith(MockitoJUnitRunner.class) public class GradleProjectPropertiesExtensionTest { - @Rule public final TemporaryFolder temporaryFolder = new TemporaryFolder(); + private static class FooExtension implements JibGradlePluginExtension { + + private final JibGradlePluginExtension extension; + + private FooExtension(JibGradlePluginExtension extension) { + this.extension = extension; + } + + @Override + public ContainerBuildPlan extendContainerBuildPlan( + ContainerBuildPlan buildPlan, + Map properties, + GradleData gradleData, + ExtensionLogger logger) + throws JibPluginExtensionException { + return extension.extendContainerBuildPlan(buildPlan, properties, gradleData, logger); + } + } + + private static class BarExtension extends FooExtension { + + private BarExtension(JibGradlePluginExtension extension) { + super(extension); + } + } + + private static class FooExtensionConfig implements ExtensionConfiguration { + + private String extensionClass = FooExtension.class.getName(); + private Map properties = Collections.emptyMap(); + + private FooExtensionConfig() {} + + private FooExtensionConfig(String extensionClass) { + this.extensionClass = extensionClass; + } + + private FooExtensionConfig(Map properties) { + this.properties = properties; + } + + @Override + public Map getProperties() { + return properties; + } + + @Override + public String getExtensionClass() { + return extensionClass; + } + } + + private static class BarExtensionConfig extends FooExtensionConfig { + + private BarExtensionConfig() { + super(BarExtension.class.getName()); + } + } @Mock private TempDirectoryProvider mockTempDirectoryProvider; @Mock private Logger mockLogger; @@ -72,26 +134,44 @@ public void setUp() { } @Test - public void testRunPluginExtensions_noExtensionsFound() throws JibPluginExtensionException { + public void testRunPluginExtensions_noExtensionsConfigured() throws JibPluginExtensionException { + JibGradlePluginExtension extension = (buildPlan, properties, gradleData, logger) -> buildPlan; + JibContainerBuilder extendedBuilder = - gradleProjectProperties.runPluginExtensions(Collections.emptyIterator(), containerBuilder); + gradleProjectProperties.runPluginExtensions( + Arrays.asList(extension), Collections.emptyList(), containerBuilder); Assert.assertSame(extendedBuilder, containerBuilder); gradleProjectProperties.waitForLoggingThread(); - Mockito.verify(mockLogger).debug("No Jib plugin extensions discovered"); + Mockito.verify(mockLogger).debug("No Jib plugin extensions configured to load"); + } + + @Test + public void testRunPluginExtensions_configuredExtensionNotFound() { + try { + gradleProjectProperties.runPluginExtensions( + Collections.emptyList(), Arrays.asList(new FooExtensionConfig()), containerBuilder); + Assert.fail(); + } catch (JibPluginExtensionException ex) { + Assert.assertEquals( + "extension configured but not discovered on Jib runtime classpath: com.google.cloud." + + "tools.jib.gradle.GradleProjectPropertiesExtensionTest$FooExtension", + ex.getMessage()); + } } @Test public void testRunPluginExtensions() throws JibPluginExtensionException { - JibGradlePluginExtension extension = - (buildPlan, gradleData, logger) -> { - logger.log(LogLevel.ERROR, "awesome error from my extension"); - return buildPlan.toBuilder().setUser("user from extension").build(); - }; + FooExtension extension = + new FooExtension( + (buildPlan, properties, gradleData, logger) -> { + logger.log(LogLevel.ERROR, "awesome error from my extension"); + return buildPlan.toBuilder().setUser("user from extension").build(); + }); JibContainerBuilder extendedBuilder = gradleProjectProperties.runPluginExtensions( - Arrays.asList(extension).iterator(), containerBuilder); + Arrays.asList(extension), Arrays.asList(new FooExtensionConfig()), containerBuilder); Assert.assertEquals("user from extension", extendedBuilder.toContainerBuildPlan().getUser()); gradleProjectProperties.waitForLoggingThread(); @@ -105,15 +185,16 @@ public void testRunPluginExtensions() throws JibPluginExtensionException { @Test public void testRunPluginExtensions_exceptionFromExtension() { FileNotFoundException fakeException = new FileNotFoundException(); - JibGradlePluginExtension extension = - (buildPlan, gradleData, logger) -> { - throw new JibPluginExtensionException( - JibGradlePluginExtension.class, "exception from extension", fakeException); - }; + FooExtension extension = + new FooExtension( + (buildPlan, properties, gradleData, logger) -> { + throw new JibPluginExtensionException( + JibGradlePluginExtension.class, "exception from extension", fakeException); + }); try { gradleProjectProperties.runPluginExtensions( - Arrays.asList(extension).iterator(), containerBuilder); + Arrays.asList(extension), Arrays.asList(new FooExtensionConfig()), containerBuilder); Assert.fail(); } catch (JibPluginExtensionException ex) { Assert.assertEquals("exception from extension", ex.getMessage()); @@ -123,12 +204,14 @@ public void testRunPluginExtensions_exceptionFromExtension() { @Test public void testRunPluginExtensions_invalidBaseImageFromExtension() { - JibGradlePluginExtension extension = - (buildPlan, gradleData, logger) -> buildPlan.toBuilder().setBaseImage(" in*val+id").build(); + FooExtension extension = + new FooExtension( + (buildPlan, properties, gradleData, logger) -> + buildPlan.toBuilder().setBaseImage(" in*val+id").build()); try { gradleProjectProperties.runPluginExtensions( - Arrays.asList(extension).iterator(), containerBuilder); + Arrays.asList(extension), Arrays.asList(new FooExtensionConfig()), containerBuilder); Assert.fail(); } catch (JibPluginExtensionException ex) { Assert.assertEquals("invalid base image reference: in*val+id", ex.getMessage()); @@ -136,4 +219,46 @@ public void testRunPluginExtensions_invalidBaseImageFromExtension() { ex.getCause(), CoreMatchers.instanceOf(InvalidImageReferenceException.class)); } } + + @Test + public void testRunPluginExtensions_extensionOrder() throws JibPluginExtensionException { + FooExtension fooExtension = + new FooExtension( + (buildPlan, properties, gradleData, logger) -> + buildPlan.toBuilder().setBaseImage("foo").build()); + BarExtension barExtension = + new BarExtension( + (buildPlan, properties, gradleData, logger) -> + buildPlan.toBuilder().setBaseImage("bar").build()); + List extensions = Arrays.asList(fooExtension, barExtension); + + JibContainerBuilder extendedBuilder1 = + gradleProjectProperties.runPluginExtensions( + extensions, + Arrays.asList(new FooExtensionConfig(), new BarExtensionConfig()), + containerBuilder); + Assert.assertEquals("bar", extendedBuilder1.toContainerBuildPlan().getBaseImage()); + + JibContainerBuilder extendedBuilder2 = + gradleProjectProperties.runPluginExtensions( + extensions, + Arrays.asList(new BarExtensionConfig(), new FooExtensionConfig()), + containerBuilder); + Assert.assertEquals("foo", extendedBuilder2.toContainerBuildPlan().getBaseImage()); + } + + @Test + public void testRunPluginExtensions_customProperties() throws JibPluginExtensionException { + FooExtension extension = + new FooExtension( + (buildPlan, properties, gradleData, logger) -> + buildPlan.toBuilder().setUser(properties.get("user")).build()); + + JibContainerBuilder extendedBuilder = + gradleProjectProperties.runPluginExtensions( + Arrays.asList(extension), + Arrays.asList(new FooExtensionConfig(ImmutableMap.of("user", "65432"))), + containerBuilder); + Assert.assertEquals("65432", extendedBuilder.toContainerBuildPlan().getUser()); + } } diff --git a/jib-maven-plugin/src/main/java/com/google/cloud/tools/jib/maven/JibPluginConfiguration.java b/jib-maven-plugin/src/main/java/com/google/cloud/tools/jib/maven/JibPluginConfiguration.java index 857b0e01f5..6a76cd24eb 100644 --- a/jib-maven-plugin/src/main/java/com/google/cloud/tools/jib/maven/JibPluginConfiguration.java +++ b/jib-maven-plugin/src/main/java/com/google/cloud/tools/jib/maven/JibPluginConfiguration.java @@ -222,7 +222,7 @@ public static class OutputPathsParameters { public static class ExtensionParameters implements ExtensionConfiguration { - @Parameter private String implementation = "undefined"; + @Parameter private String implementation = ""; @Parameter private Map properties = Collections.emptyMap(); diff --git a/jib-maven-plugin/src/main/java/com/google/cloud/tools/jib/maven/MavenProjectProperties.java b/jib-maven-plugin/src/main/java/com/google/cloud/tools/jib/maven/MavenProjectProperties.java index 9892cfd41b..ac897c0c55 100644 --- a/jib-maven-plugin/src/main/java/com/google/cloud/tools/jib/maven/MavenProjectProperties.java +++ b/jib-maven-plugin/src/main/java/com/google/cloud/tools/jib/maven/MavenProjectProperties.java @@ -555,7 +555,7 @@ JibContainerBuilder runPluginExtensions( JibMavenPluginExtension extension = null; ContainerBuildPlan buildPlan = jibContainerBuilder.toContainerBuildPlan(); MavenExtensionData mavenData = new MavenExtensionData(project, session); - MavenExtensionLogger logger = new MavenExtensionLogger(this::log); + MavenExtensionLogger extensionLogger = new MavenExtensionLogger(this::log); try { for (ExtensionConfiguration config : extensionConfigs) { String extensionClass = config.getExtensionClass(); @@ -570,7 +570,7 @@ JibContainerBuilder runPluginExtensions( log(LogEvent.lifecycle("Running extension: " + extensionClass)); buildPlan = extension.extendContainerBuildPlan( - buildPlan, config.getProperties(), mavenData, logger); + buildPlan, config.getProperties(), mavenData, extensionLogger); ImageReference.parse(buildPlan.getBaseImage()); // to validate image reference } return jibContainerBuilder.applyContainerBuildPlan(buildPlan); diff --git a/jib-maven-plugin/src/test/java/com/google/cloud/tools/jib/maven/MavenProjectPropertiesExtensionTest.java b/jib-maven-plugin/src/test/java/com/google/cloud/tools/jib/maven/MavenProjectPropertiesExtensionTest.java index 7a503a8273..8819340d6d 100644 --- a/jib-maven-plugin/src/test/java/com/google/cloud/tools/jib/maven/MavenProjectPropertiesExtensionTest.java +++ b/jib-maven-plugin/src/test/java/com/google/cloud/tools/jib/maven/MavenProjectPropertiesExtensionTest.java @@ -41,9 +41,7 @@ import org.hamcrest.CoreMatchers; import org.junit.Assert; import org.junit.Before; -import org.junit.Rule; import org.junit.Test; -import org.junit.rules.TemporaryFolder; import org.junit.runner.RunWith; import org.mockito.Mock; import org.mockito.Mockito; @@ -112,9 +110,6 @@ private BarExtensionConfig() { } } - @Rule public final TestRepository testRepository = new TestRepository(); - @Rule public final TemporaryFolder temporaryFolder = new TemporaryFolder(); - @Mock private PluginDescriptor mockJibPluginDescriptor; @Mock private MavenProject mockMavenProject; @Mock private MavenSession mockMavenSession;