Skip to content

Commit 14dc2fa

Browse files
authored
Configurable gradle configurations (#3034)
1 parent d668d7c commit 14dc2fa

File tree

12 files changed

+93
-27
lines changed

12 files changed

+93
-27
lines changed

jib-core/src/integration-test/java/com/google/cloud/tools/jib/api/ContainerizerIntegrationTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -96,7 +96,7 @@ public static void setUp() throws URISyntaxException, IOException {
9696

9797
/**
9898
* Lists the files in the {@code resourcePath} resources directory and builds a {@link
99-
* LayerConfiguration} from those files.
99+
* FileEntriesLayer} from those files.
100100
*/
101101
private static FileEntriesLayer makeLayerConfiguration(
102102
String resourcePath, String pathInContainer) throws URISyntaxException, IOException {

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

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -106,7 +106,11 @@ public void buildDocker()
106106
TempDirectoryProvider tempDirectoryProvider = new TempDirectoryProvider();
107107

108108
GradleProjectProperties projectProperties =
109-
GradleProjectProperties.getForProject(getProject(), getLogger(), tempDirectoryProvider);
109+
GradleProjectProperties.getForProject(
110+
getProject(),
111+
getLogger(),
112+
tempDirectoryProvider,
113+
jibExtension.getConfigurationName().get());
110114
GlobalConfig globalConfig = GlobalConfig.readConfig();
111115
Future<Optional<String>> updateCheckFuture =
112116
TaskCommon.newUpdateChecker(projectProperties, globalConfig, getLogger());

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

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -94,7 +94,11 @@ public void buildImage()
9494
TempDirectoryProvider tempDirectoryProvider = new TempDirectoryProvider();
9595

9696
GradleProjectProperties projectProperties =
97-
GradleProjectProperties.getForProject(getProject(), getLogger(), tempDirectoryProvider);
97+
GradleProjectProperties.getForProject(
98+
getProject(),
99+
getLogger(),
100+
tempDirectoryProvider,
101+
jibExtension.getConfigurationName().get());
98102
GlobalConfig globalConfig = GlobalConfig.readConfig();
99103
Future<Optional<String>> updateCheckFuture =
100104
TaskCommon.newUpdateChecker(projectProperties, globalConfig, getLogger());

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

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -95,7 +95,8 @@ public FileCollection getInputFiles() {
9595
.stream()
9696
.map(ExtraDirectoryParameters::getFrom)
9797
.collect(Collectors.toList());
98-
return GradleProjectProperties.getInputFiles(getProject(), extraDirectories);
98+
return GradleProjectProperties.getInputFiles(
99+
getProject(), extraDirectories, jibExtension.getConfigurationName().get());
99100
}
100101

101102
/**
@@ -127,7 +128,11 @@ public void buildTar()
127128
TempDirectoryProvider tempDirectoryProvider = new TempDirectoryProvider();
128129

129130
GradleProjectProperties projectProperties =
130-
GradleProjectProperties.getForProject(getProject(), getLogger(), tempDirectoryProvider);
131+
GradleProjectProperties.getForProject(
132+
getProject(),
133+
getLogger(),
134+
tempDirectoryProvider,
135+
jibExtension.getConfigurationName().get());
131136
GlobalConfig globalConfig = GlobalConfig.readConfig();
132137
Future<Optional<String>> updateCheckFuture =
133138
TaskCommon.newUpdateChecker(projectProperties, globalConfig, getLogger());

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

Lines changed: 19 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,6 @@
7070
import org.gradle.api.artifacts.component.ProjectComponentIdentifier;
7171
import org.gradle.api.file.FileCollection;
7272
import org.gradle.api.logging.Logger;
73-
import org.gradle.api.plugins.JavaPlugin;
7473
import org.gradle.api.plugins.JavaPluginConvention;
7574
import org.gradle.api.plugins.WarPlugin;
7675
import org.gradle.api.tasks.SourceSet;
@@ -104,10 +103,15 @@ public class GradleProjectProperties implements ProjectProperties {
104103
* @param project a gradle project
105104
* @param logger a gradle logging instance to use for logging during the build
106105
* @param tempDirectoryProvider for scratch space during the build
106+
* @param configurationName the configuration of which the dependencies should be packed into the
107+
* container
107108
* @return a GradleProjectProperties instance to use in a jib build
108109
*/
109110
public static GradleProjectProperties getForProject(
110-
Project project, Logger logger, TempDirectoryProvider tempDirectoryProvider) {
111+
Project project,
112+
Logger logger,
113+
TempDirectoryProvider tempDirectoryProvider,
114+
String configurationName) {
111115
Supplier<List<JibGradlePluginExtension<?>>> extensionLoader =
112116
() -> {
113117
List<JibGradlePluginExtension<?>> extensions = new ArrayList<>();
@@ -117,7 +121,8 @@ public static GradleProjectProperties getForProject(
117121
}
118122
return extensions;
119123
};
120-
return new GradleProjectProperties(project, logger, tempDirectoryProvider, extensionLoader);
124+
return new GradleProjectProperties(
125+
project, logger, tempDirectoryProvider, extensionLoader, configurationName);
121126
}
122127

123128
String getWarFilePath() {
@@ -155,16 +160,19 @@ private static boolean isProgressFooterEnabled(Project project) {
155160
private final ConsoleLogger consoleLogger;
156161
private final TempDirectoryProvider tempDirectoryProvider;
157162
private final Supplier<List<JibGradlePluginExtension<?>>> extensionLoader;
163+
private final String configurationName;
158164

159165
@VisibleForTesting
160166
GradleProjectProperties(
161167
Project project,
162168
Logger logger,
163169
TempDirectoryProvider tempDirectoryProvider,
164-
Supplier<List<JibGradlePluginExtension<?>>> extensionLoader) {
170+
Supplier<List<JibGradlePluginExtension<?>>> extensionLoader,
171+
String configurationName) {
165172
this.project = project;
166173
this.tempDirectoryProvider = tempDirectoryProvider;
167174
this.extensionLoader = extensionLoader;
175+
this.configurationName = configurationName;
168176
ConsoleLoggerBuilder consoleLoggerBuilder =
169177
(isProgressFooterEnabled(project)
170178
? ConsoleLoggerBuilder.rich(singleThreadedExecutor, false)
@@ -193,7 +201,7 @@ public JibContainerBuilder createJibContainerBuilder(
193201
project.files(
194202
project
195203
.getConfigurations()
196-
.getByName(JavaPlugin.RUNTIME_CLASSPATH_CONFIGURATION_NAME)
204+
.getByName(configurationName)
197205
.getResolvedConfiguration()
198206
.getResolvedArtifacts()
199207
.stream()
@@ -219,7 +227,8 @@ public JibContainerBuilder createJibContainerBuilder(
219227
FileCollection classesOutputDirectories =
220228
mainSourceSet.getOutput().getClassesDirs().filter(File::exists);
221229
Path resourcesOutputDirectory = mainSourceSet.getOutput().getResourcesDir().toPath();
222-
FileCollection allFiles = mainSourceSet.getRuntimeClasspath().filter(File::exists);
230+
FileCollection allFiles =
231+
project.getConfigurations().getByName(configurationName).filter(File::exists);
223232

224233
FileCollection nonProjectDependencies =
225234
allFiles
@@ -298,7 +307,7 @@ public List<Path> getClassFiles() throws IOException {
298307
@Override
299308
public List<Path> getDependencies() {
300309
List<Path> dependencies = new ArrayList<>();
301-
FileCollection runtimeClasspath = getMainSourceSet().getRuntimeClasspath();
310+
FileCollection runtimeClasspath = project.getConfigurations().getByName(configurationName);
302311
// To be on the safe side with the order, calling "forEach" first (no filtering operations).
303312
runtimeClasspath.forEach(
304313
file -> {
@@ -387,12 +396,10 @@ public boolean isWarProject() {
387396
* @param extraDirectories the image's configured extra directories
388397
* @return the input files
389398
*/
390-
static FileCollection getInputFiles(Project project, List<Path> extraDirectories) {
391-
JavaPluginConvention javaPluginConvention =
392-
project.getConvention().getPlugin(JavaPluginConvention.class);
393-
SourceSet mainSourceSet = javaPluginConvention.getSourceSets().getByName(MAIN_SOURCE_SET_NAME);
399+
static FileCollection getInputFiles(
400+
Project project, List<Path> extraDirectories, String configurationName) {
394401
List<FileCollection> dependencyFileCollections = new ArrayList<>();
395-
dependencyFileCollections.add(mainSourceSet.getRuntimeClasspath());
402+
dependencyFileCollections.add(project.getConfigurations().getByName(configurationName));
396403

397404
extraDirectories
398405
.stream()

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

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
import org.gradle.api.Action;
2222
import org.gradle.api.Project;
2323
import org.gradle.api.model.ObjectFactory;
24+
import org.gradle.api.plugins.JavaPlugin;
2425
import org.gradle.api.provider.ListProperty;
2526
import org.gradle.api.provider.Property;
2627
import org.gradle.api.tasks.Input;
@@ -94,6 +95,7 @@ public class JibExtension {
9495
private final SkaffoldParameters skaffold;
9596
private final Property<Boolean> allowInsecureRegistries;
9697
private final Property<String> containerizingMode;
98+
private final Property<String> configurationName;
9799
private final ListProperty<ExtensionParameters> pluginExtensions;
98100
private final ExtensionParametersSpec extensionParametersSpec;
99101

@@ -118,6 +120,10 @@ public JibExtension(Project project) {
118120
objectFactory.newInstance(ExtensionParametersSpec.class, pluginExtensions);
119121
allowInsecureRegistries = objectFactory.property(Boolean.class);
120122
containerizingMode = objectFactory.property(String.class);
123+
configurationName =
124+
objectFactory
125+
.property(String.class)
126+
.convention(JavaPlugin.RUNTIME_CLASSPATH_CONFIGURATION_NAME);
121127

122128
// Sets defaults.
123129
allowInsecureRegistries.set(DEFAULT_ALLOW_INSECURE_REGISTIRIES);
@@ -221,6 +227,22 @@ public String getContainerizingMode() {
221227
return property != null ? property : containerizingMode.get();
222228
}
223229

230+
/**
231+
* Returns the configurationName property while setting it to the value of the system property if
232+
* present.
233+
*
234+
* @return The configurationName property
235+
*/
236+
@Input
237+
@Optional
238+
public Property<String> getConfigurationName() {
239+
String property = System.getProperty(PropertyNames.CONFIGURATION_NAME);
240+
if (property != null) {
241+
configurationName.set(property);
242+
}
243+
return configurationName;
244+
}
245+
224246
@Nested
225247
@Optional
226248
public ListProperty<ExtensionParameters> getPluginExtensions() {

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

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -183,12 +183,16 @@ public void apply(Project project) {
183183
}
184184

185185
SourceSet mainSourceSet =
186-
project
186+
projectAfterEvaluation
187187
.getConvention()
188188
.getPlugin(JavaPluginConvention.class)
189189
.getSourceSets()
190190
.getByName(SourceSet.MAIN_SOURCE_SET_NAME);
191191
jibDependencies.add(mainSourceSet.getRuntimeClasspath());
192+
jibDependencies.add(
193+
projectAfterEvaluation
194+
.getConfigurations()
195+
.getByName(jibExtension.getConfigurationName().get()));
192196

193197
Set<TaskProvider<?>> jibTaskProviders =
194198
ImmutableSet.of(buildImageTask, buildDockerTask, buildTarTask, syncMapTask);

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

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,6 @@
3838
import org.gradle.api.artifacts.ProjectDependency;
3939
import org.gradle.api.artifacts.PublishArtifact;
4040
import org.gradle.api.initialization.Settings;
41-
import org.gradle.api.plugins.JavaPlugin;
4241
import org.gradle.api.plugins.JavaPluginConvention;
4342
import org.gradle.api.tasks.SourceSet;
4443
import org.gradle.api.tasks.TaskAction;
@@ -110,7 +109,7 @@ public void listFiles() throws IOException {
110109

111110
// Add SNAPSHOT, non-project dependency jars
112111
for (File file :
113-
project.getConfigurations().getByName(JavaPlugin.RUNTIME_CLASSPATH_CONFIGURATION_NAME)) {
112+
project.getConfigurations().getByName(jibExtension.getConfigurationName().get())) {
114113
if (!projectDependencyJars.contains(file) && file.toString().contains("SNAPSHOT")) {
115114
skaffoldFilesOutput.addInput(file.toPath());
116115
projectDependencyJars.add(file); // Add to set to avoid printing the same files twice
@@ -192,18 +191,20 @@ private void addProjectFiles(Project project) {
192191
* @return the set of project dependencies
193192
*/
194193
private Set<ProjectDependency> findProjectDependencies(Project project) {
194+
Preconditions.checkNotNull(jibExtension);
195+
195196
Set<ProjectDependency> projectDependencies = new HashSet<>();
196197
Deque<Project> projects = new ArrayDeque<>();
197198
projects.push(project);
198199

200+
String configurationName = jibExtension.getConfigurationName().get();
201+
199202
while (!projects.isEmpty()) {
200203
Project currentProject = projects.pop();
201204

202205
// Search through all dependencies
203206
Configuration runtimeClasspath =
204-
currentProject
205-
.getConfigurations()
206-
.findByName(JavaPlugin.RUNTIME_CLASSPATH_CONFIGURATION_NAME);
207+
currentProject.getConfigurations().findByName(configurationName);
207208
if (runtimeClasspath != null) {
208209
for (Configuration configuration : runtimeClasspath.getHierarchy()) {
209210
for (Dependency dependency : configuration.getDependencies()) {

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

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,11 @@ public void listFilesAndTargets() {
5151

5252
try (TempDirectoryProvider tempDirectoryProvider = new TempDirectoryProvider()) {
5353
GradleProjectProperties projectProperties =
54-
GradleProjectProperties.getForProject(getProject(), getLogger(), tempDirectoryProvider);
54+
GradleProjectProperties.getForProject(
55+
getProject(),
56+
getLogger(),
57+
tempDirectoryProvider,
58+
jibExtension.getConfigurationName().get());
5559

5660
GradleRawConfiguration configuration = new GradleRawConfiguration(jibExtension);
5761

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

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@
3939
import org.gradle.api.logging.Logger;
4040
import org.gradle.api.logging.configuration.ConsoleOutput;
4141
import org.gradle.api.model.ObjectFactory;
42+
import org.gradle.api.plugins.JavaPlugin;
4243
import org.hamcrest.CoreMatchers;
4344
import org.hamcrest.MatcherAssert;
4445
import org.junit.Assert;
@@ -233,7 +234,11 @@ public void setUp() {
233234

234235
gradleProjectProperties =
235236
new GradleProjectProperties(
236-
mockProject, mockLogger, mockTempDirectoryProvider, () -> loadedExtensions);
237+
mockProject,
238+
mockLogger,
239+
mockTempDirectoryProvider,
240+
() -> loadedExtensions,
241+
JavaPlugin.RUNTIME_CLASSPATH_CONFIGURATION_NAME);
237242
}
238243

239244
@Test

0 commit comments

Comments
 (0)