Skip to content

Commit a516384

Browse files
committed
Support lazy configuration for jvmFlags property of ContainerParameters
Fixes GoogleContainerTools#3936.
1 parent 93efe6d commit a516384

File tree

6 files changed

+32
-15
lines changed

6 files changed

+32
-15
lines changed

jib-gradle-plugin/src/main/java/com/google/cloud/tools/jib/gradle/ContainerParameters.java

+11-9
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
import javax.annotation.Nullable;
2727
import javax.inject.Inject;
2828
import org.gradle.api.model.ObjectFactory;
29+
import org.gradle.api.provider.ListProperty;
2930
import org.gradle.api.provider.MapProperty;
3031
import org.gradle.api.provider.Property;
3132
import org.gradle.api.tasks.Input;
@@ -37,7 +38,7 @@
3738
*/
3839
public class ContainerParameters {
3940

40-
private List<String> jvmFlags = Collections.emptyList();
41+
private final ListProperty<String> jvmFlags;
4142
private Map<String, String> environment = Collections.emptyMap();
4243
@Nullable private List<String> entrypoint;
4344
private List<String> extraClasspath = Collections.emptyList();
@@ -60,6 +61,7 @@ public ContainerParameters(ObjectFactory objectFactory) {
6061
filesModificationTime = objectFactory.property(String.class).convention("EPOCH_PLUS_SECOND");
6162
creationTime = objectFactory.property(String.class).convention("EPOCH");
6263
mainClass = objectFactory.property(String.class);
64+
jvmFlags = objectFactory.listProperty(String.class).convention(Collections.emptyList());
6365
}
6466

6567
@Input
@@ -83,18 +85,18 @@ public void setEntrypoint(String entrypoint) {
8385

8486
@Input
8587
@Optional
86-
public List<String> getJvmFlags() {
87-
if (System.getProperty(PropertyNames.CONTAINER_JVM_FLAGS) != null) {
88-
return ConfigurationPropertyValidator.parseListProperty(
89-
System.getProperty(PropertyNames.CONTAINER_JVM_FLAGS));
88+
public ListProperty<String> getJvmFlags() {
89+
String jvmFlagsSystemProperty = System.getProperty(PropertyNames.CONTAINER_JVM_FLAGS);
90+
if (jvmFlagsSystemProperty != null) {
91+
List<String> parsedJvmFlags =
92+
ConfigurationPropertyValidator.parseListProperty(jvmFlagsSystemProperty);
93+
if (!parsedJvmFlags.equals(jvmFlags.get())) {
94+
jvmFlags.set(parsedJvmFlags);
95+
}
9096
}
9197
return jvmFlags;
9298
}
9399

94-
public void setJvmFlags(List<String> jvmFlags) {
95-
this.jvmFlags = jvmFlags;
96-
}
97-
98100
@Input
99101
@Optional
100102
public Map<String, String> getEnvironment() {

jib-gradle-plugin/src/main/java/com/google/cloud/tools/jib/gradle/GradleRawConfiguration.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -98,7 +98,7 @@ public Optional<String> getMainClass() {
9898

9999
@Override
100100
public List<String> getJvmFlags() {
101-
return jibExtension.getContainer().getJvmFlags();
101+
return jibExtension.getContainer().getJvmFlags().get();
102102
}
103103

104104
@Override

jib-gradle-plugin/src/test/java/com/google/cloud/tools/jib/gradle/GradleRawConfigurationTest.java

+4-1
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
import java.util.HashMap;
2626
import java.util.HashSet;
2727
import java.util.Optional;
28+
import org.gradle.api.provider.ListProperty;
2829
import org.gradle.api.provider.MapProperty;
2930
import org.gradle.api.provider.Property;
3031
import org.junit.Assert;
@@ -40,6 +41,7 @@ public class GradleRawConfigurationTest {
4041

4142
@Mock private MapProperty<String, String> labels;
4243
@Mock private Property<String> mainClass;
44+
@Mock private ListProperty<String> jvmFlags;
4345

4446
@Test
4547
public void testGetters() {
@@ -88,7 +90,8 @@ public void testGetters() {
8890
Mockito.when(containerParameters.getEntrypoint()).thenReturn(Arrays.asList("java", "Main"));
8991
Mockito.when(containerParameters.getEnvironment())
9092
.thenReturn(new HashMap<>(ImmutableMap.of("currency", "dollar")));
91-
Mockito.when(containerParameters.getJvmFlags()).thenReturn(Arrays.asList("-cp", "."));
93+
Mockito.when(jvmFlags.get()).thenReturn(Arrays.asList("-cp", "."));
94+
Mockito.when(containerParameters.getJvmFlags()).thenReturn(jvmFlags);
9295
Mockito.when(labels.get()).thenReturn(Collections.singletonMap("unit", "cm"));
9396
Mockito.when(containerParameters.getLabels()).thenReturn(labels);
9497
Mockito.when(mainClass.getOrNull()).thenReturn("com.example.Main");

jib-gradle-plugin/src/test/java/com/google/cloud/tools/jib/gradle/JibExtensionTest.java

+4-4
Original file line numberDiff line numberDiff line change
@@ -175,7 +175,7 @@ public void testToTags_containsEmptyTag() {
175175

176176
@Test
177177
public void testContainer() {
178-
assertThat(testJibExtension.getContainer().getJvmFlags()).isEmpty();
178+
assertThat(testJibExtension.getContainer().getJvmFlags().get()).isEmpty();
179179
assertThat(testJibExtension.getContainer().getEnvironment()).isEmpty();
180180
assertThat(testJibExtension.getContainer().getExtraClasspath()).isEmpty();
181181
assertThat(testJibExtension.getContainer().getExpandClasspathDependencies()).isFalse();
@@ -191,7 +191,7 @@ public void testContainer() {
191191

192192
testJibExtension.container(
193193
container -> {
194-
container.setJvmFlags(Arrays.asList("jvmFlag1", "jvmFlag2"));
194+
container.getJvmFlags().set(Arrays.asList("jvmFlag1", "jvmFlag2"));
195195
container.setEnvironment(ImmutableMap.of("var1", "value1", "var2", "value2"));
196196
container.setEntrypoint(Arrays.asList("foo", "bar", "baz"));
197197
container.setExtraClasspath(Arrays.asList("/d1", "/d2", "/d3"));
@@ -206,7 +206,7 @@ public void testContainer() {
206206
});
207207
ContainerParameters container = testJibExtension.getContainer();
208208
assertThat(container.getEntrypoint()).containsExactly("foo", "bar", "baz").inOrder();
209-
assertThat(container.getJvmFlags()).containsExactly("jvmFlag1", "jvmFlag2").inOrder();
209+
assertThat(container.getJvmFlags().get()).containsExactly("jvmFlag1", "jvmFlag2").inOrder();
210210
assertThat(container.getEnvironment())
211211
.containsExactly("var1", "value1", "var2", "value2")
212212
.inOrder();
@@ -477,7 +477,7 @@ public void testProperties() {
477477
System.setProperty("jib.container.format", "OCI");
478478
assertThat(testJibExtension.getContainer().getFormat()).isSameInstanceAs(ImageFormat.OCI);
479479
System.setProperty("jib.container.jvmFlags", "flag1,flag2,flag3");
480-
assertThat(testJibExtension.getContainer().getJvmFlags())
480+
assertThat(testJibExtension.getContainer().getJvmFlags().get())
481481
.containsExactly("flag1", "flag2", "flag3")
482482
.inOrder();
483483
System.setProperty("jib.container.labels", "label1=val1,label2=val2");

jib-gradle-plugin/src/test/java/com/google/cloud/tools/jib/gradle/JibPluginTest.java

+6
Original file line numberDiff line numberDiff line change
@@ -413,6 +413,12 @@ public void testLazyEvalForMainClass() {
413413
assertThat(showLabels.getOutput()).contains("mainClass value updated");
414414
}
415415

416+
@Test
417+
public void testLazyEvalForJvmFlags() {
418+
BuildResult showLabels = testProject.build("showJvmFlags");
419+
assertThat(showLabels.getOutput()).contains("jvmFlags value [updated]");
420+
}
421+
416422
private Project createProject(String... plugins) {
417423
Project project =
418424
ProjectBuilder.builder().withProjectDir(testProjectRoot.getRoot()).withName("root").build();

jib-gradle-plugin/src/test/resources/gradle/projects/lazy-evaluation/build.gradle

+6
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@ jib {
4040
creationTime = project.provider { project.ext.jibCreationTime }
4141
filesModificationTime = project.provider { project.ext.jibFilesModificationTime }
4242
mainClass = project.provider { project.ext.value }
43+
jvmFlags = project.provider { [project.ext.value] }
4344
}
4445
extraDirectories {
4546
paths = project.provider { ['src/main/' + project.ext.value + '-custom-extra-dir'] }
@@ -70,3 +71,8 @@ tasks.register('showMainClass') {
7071
String prop = project.extensions.jib.container.mainClass.get()
7172
println('mainClass value ' + prop)
7273
}
74+
75+
tasks.register('showJvmFlags') {
76+
List<String> prop = project.extensions.jib.container.jvmFlags.get()
77+
println('jvmFlags value ' + prop)
78+
}

0 commit comments

Comments
 (0)