diff --git a/jib-gradle-plugin/src/main/java/com/google/cloud/tools/jib/gradle/BuildDockerTask.java b/jib-gradle-plugin/src/main/java/com/google/cloud/tools/jib/gradle/BuildDockerTask.java index 692449db03..99ae393dab 100644 --- a/jib-gradle-plugin/src/main/java/com/google/cloud/tools/jib/gradle/BuildDockerTask.java +++ b/jib-gradle-plugin/src/main/java/com/google/cloud/tools/jib/gradle/BuildDockerTask.java @@ -111,7 +111,8 @@ public void buildDocker() getProject(), getLogger(), tempDirectoryProvider, - jibExtension.getConfigurationName().get()); + jibExtension.getConfigurationName().get(), + jibExtension.getSourceSetName().get()); GlobalConfig globalConfig = GlobalConfig.readConfig(); Future> updateCheckFuture = TaskCommon.newUpdateChecker(projectProperties, globalConfig, getLogger()); diff --git a/jib-gradle-plugin/src/main/java/com/google/cloud/tools/jib/gradle/BuildImageTask.java b/jib-gradle-plugin/src/main/java/com/google/cloud/tools/jib/gradle/BuildImageTask.java index 49265559a6..d4a317fad2 100644 --- a/jib-gradle-plugin/src/main/java/com/google/cloud/tools/jib/gradle/BuildImageTask.java +++ b/jib-gradle-plugin/src/main/java/com/google/cloud/tools/jib/gradle/BuildImageTask.java @@ -99,7 +99,8 @@ public void buildImage() getProject(), getLogger(), tempDirectoryProvider, - jibExtension.getConfigurationName().get()); + jibExtension.getConfigurationName().get(), + jibExtension.getSourceSetName().get()); GlobalConfig globalConfig = GlobalConfig.readConfig(); Future> updateCheckFuture = TaskCommon.newUpdateChecker(projectProperties, globalConfig, getLogger()); diff --git a/jib-gradle-plugin/src/main/java/com/google/cloud/tools/jib/gradle/BuildTarTask.java b/jib-gradle-plugin/src/main/java/com/google/cloud/tools/jib/gradle/BuildTarTask.java index 1a77856b6b..d770b92832 100644 --- a/jib-gradle-plugin/src/main/java/com/google/cloud/tools/jib/gradle/BuildTarTask.java +++ b/jib-gradle-plugin/src/main/java/com/google/cloud/tools/jib/gradle/BuildTarTask.java @@ -94,7 +94,10 @@ public FileCollection getInputFiles() { .map(ExtraDirectoryParameters::getFrom) .collect(Collectors.toList()); return GradleProjectProperties.getInputFiles( - getProject(), extraDirectories, jibExtension.getConfigurationName().get()); + getProject(), + extraDirectories, + jibExtension.getConfigurationName().get(), + jibExtension.getSourceSetName().get()); } /** @@ -130,7 +133,8 @@ public void buildTar() getProject(), getLogger(), tempDirectoryProvider, - jibExtension.getConfigurationName().get()); + jibExtension.getConfigurationName().get(), + jibExtension.getSourceSetName().get()); GlobalConfig globalConfig = GlobalConfig.readConfig(); Future> updateCheckFuture = TaskCommon.newUpdateChecker(projectProperties, globalConfig, getLogger()); 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 6a1978fe19..28ce73a8ef 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 @@ -94,9 +94,6 @@ public class GradleProjectProperties implements ProjectProperties { /** Used for logging during main class inference. */ private static final String JAR_PLUGIN_NAME = "'jar' task"; - /** Name of the `main` {@link SourceSet} to use as source files. */ - private static final String MAIN_SOURCE_SET_NAME = "main"; - private static final Duration LOGGING_THREAD_SHUTDOWN_TIMEOUT = Duration.ofSeconds(1); /** @@ -107,13 +104,15 @@ public class GradleProjectProperties implements ProjectProperties { * @param tempDirectoryProvider for scratch space during the build * @param configurationName the configuration of which the dependencies should be packed into the * container + * @param sourceSetName the name of the source set which should be packed into the container * @return a GradleProjectProperties instance to use in a jib build */ public static GradleProjectProperties getForProject( Project project, Logger logger, TempDirectoryProvider tempDirectoryProvider, - String configurationName) { + String configurationName, + String sourceSetName) { Supplier>> extensionLoader = () -> { List> extensions = new ArrayList<>(); @@ -124,7 +123,7 @@ public static GradleProjectProperties getForProject( return extensions; }; return new GradleProjectProperties( - project, logger, tempDirectoryProvider, extensionLoader, configurationName); + project, logger, tempDirectoryProvider, extensionLoader, configurationName, sourceSetName); } String getWarFilePath() { @@ -163,6 +162,7 @@ private static boolean isProgressFooterEnabled(Project project) { private final TempDirectoryProvider tempDirectoryProvider; private final Supplier>> extensionLoader; private final String configurationName; + private final String sourceSetName; @VisibleForTesting GradleProjectProperties( @@ -170,11 +170,13 @@ private static boolean isProgressFooterEnabled(Project project) { Logger logger, TempDirectoryProvider tempDirectoryProvider, Supplier>> extensionLoader, - String configurationName) { + String configurationName, + String sourceSetName) { this.project = project; this.tempDirectoryProvider = tempDirectoryProvider; this.extensionLoader = extensionLoader; this.configurationName = configurationName; + this.sourceSetName = sourceSetName; ConsoleLoggerBuilder consoleLoggerBuilder = (isProgressFooterEnabled(project) ? ConsoleLoggerBuilder.rich(singleThreadedExecutor, false) @@ -409,14 +411,17 @@ public boolean isWarProject() { */ @VisibleForTesting static FileCollection getInputFiles( - Project project, List extraDirectories, String configurationName) { + Project project, + List extraDirectories, + String configurationName, + String sourceSetName) { List dependencyFileCollections = new ArrayList<>(); dependencyFileCollections.add(project.getConfigurations().getByName(configurationName)); // Output directories (classes and resources) from main SourceSet are added // so that BuildTarTask picks up changes in these and do not skip task SourceSetContainer sourceSetContainer = project.getExtensions().getByType(SourceSetContainer.class); - SourceSet mainSourceSet = sourceSetContainer.getByName(MAIN_SOURCE_SET_NAME); + SourceSet mainSourceSet = sourceSetContainer.getByName(sourceSetName); dependencyFileCollections.add(mainSourceSet.getOutput()); extraDirectories.stream() @@ -547,6 +552,6 @@ private JibGradlePluginExtension findConfiguredExtension( private SourceSet getMainSourceSet() { SourceSetContainer sourceSetContainer = project.getExtensions().getByType(SourceSetContainer.class); - return sourceSetContainer.getByName(MAIN_SOURCE_SET_NAME); + return sourceSetContainer.getByName(sourceSetName); } } 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 fbcea4c006..7089cc39e6 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 @@ -27,6 +27,7 @@ import org.gradle.api.tasks.Input; import org.gradle.api.tasks.Nested; import org.gradle.api.tasks.Optional; +import org.gradle.api.tasks.SourceSet; /** * Plugin extension for {@link JibPlugin}. @@ -96,6 +97,7 @@ public class JibExtension { private final Property allowInsecureRegistries; private final Property containerizingMode; private final Property configurationName; + private final Property sourceSetName; private final ListProperty pluginExtensions; private final ExtensionParametersSpec extensionParametersSpec; @@ -126,6 +128,7 @@ public JibExtension(Project project) { objectFactory .property(String.class) .convention(JavaPlugin.RUNTIME_CLASSPATH_CONFIGURATION_NAME); + sourceSetName = objectFactory.property(String.class).convention(SourceSet.MAIN_SOURCE_SET_NAME); } public void from(Action action) { @@ -241,6 +244,16 @@ public Property getConfigurationName() { return configurationName; } + @Input + @Optional + public Property getSourceSetName() { + String property = System.getProperty(PropertyNames.SOURCE_SET_NAME); + if (property != null && !property.equals(sourceSetName.get())) { + sourceSetName.set(property); + } + return sourceSetName; + } + @Nested @Optional public ListProperty getPluginExtensions() { diff --git a/jib-gradle-plugin/src/main/java/com/google/cloud/tools/jib/gradle/JibPlugin.java b/jib-gradle-plugin/src/main/java/com/google/cloud/tools/jib/gradle/JibPlugin.java index 6f2d9d16d1..904b649f9c 100644 --- a/jib-gradle-plugin/src/main/java/com/google/cloud/tools/jib/gradle/JibPlugin.java +++ b/jib-gradle-plugin/src/main/java/com/google/cloud/tools/jib/gradle/JibPlugin.java @@ -186,7 +186,7 @@ public void apply(Project project) { projectAfterEvaluation .getExtensions() .getByType(SourceSetContainer.class) - .getByName(SourceSet.MAIN_SOURCE_SET_NAME); + .getByName(jibExtension.getSourceSetName().get()); jibDependencies.add(mainSourceSet.getRuntimeClasspath()); jibDependencies.add( projectAfterEvaluation diff --git a/jib-gradle-plugin/src/main/java/com/google/cloud/tools/jib/gradle/skaffold/FilesTaskV2.java b/jib-gradle-plugin/src/main/java/com/google/cloud/tools/jib/gradle/skaffold/FilesTaskV2.java index fc15b021cf..80900e30e7 100644 --- a/jib-gradle-plugin/src/main/java/com/google/cloud/tools/jib/gradle/skaffold/FilesTaskV2.java +++ b/jib-gradle-plugin/src/main/java/com/google/cloud/tools/jib/gradle/skaffold/FilesTaskV2.java @@ -158,14 +158,17 @@ private void addGradleFiles(Project project) { * @param project the project */ private void addProjectFiles(Project project) { + Preconditions.checkNotNull(jibExtension); + // Add build config, settings, etc. addGradleFiles(project); // Add sources + resources SourceSetContainer sourceSetContainer = project.getExtensions().findByType(SourceSetContainer.class); + String sourceSetName = jibExtension.getSourceSetName().get(); if (sourceSetContainer != null) { - SourceSet mainSourceSet = sourceSetContainer.findByName(SourceSet.MAIN_SOURCE_SET_NAME); + SourceSet mainSourceSet = sourceSetContainer.findByName(sourceSetName); if (mainSourceSet != null) { mainSourceSet .getAllSource() diff --git a/jib-gradle-plugin/src/main/java/com/google/cloud/tools/jib/gradle/skaffold/SyncMapTask.java b/jib-gradle-plugin/src/main/java/com/google/cloud/tools/jib/gradle/skaffold/SyncMapTask.java index 7d8d9e4b02..df2fd7a2bf 100644 --- a/jib-gradle-plugin/src/main/java/com/google/cloud/tools/jib/gradle/skaffold/SyncMapTask.java +++ b/jib-gradle-plugin/src/main/java/com/google/cloud/tools/jib/gradle/skaffold/SyncMapTask.java @@ -55,7 +55,8 @@ public void listFilesAndTargets() { getProject(), getLogger(), tempDirectoryProvider, - jibExtension.getConfigurationName().get()); + jibExtension.getConfigurationName().get(), + jibExtension.getSourceSetName().get()); GradleRawConfiguration configuration = new GradleRawConfiguration(jibExtension); 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 63718ce0e5..6959fe7f7d 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 @@ -40,6 +40,7 @@ import org.gradle.api.logging.configuration.ConsoleOutput; import org.gradle.api.model.ObjectFactory; import org.gradle.api.plugins.JavaPlugin; +import org.gradle.api.tasks.SourceSet; import org.hamcrest.CoreMatchers; import org.hamcrest.MatcherAssert; import org.junit.Assert; @@ -238,7 +239,8 @@ public void setUp() { mockLogger, mockTempDirectoryProvider, () -> loadedExtensions, - JavaPlugin.RUNTIME_CLASSPATH_CONFIGURATION_NAME); + JavaPlugin.RUNTIME_CLASSPATH_CONFIGURATION_NAME, + SourceSet.MAIN_SOURCE_SET_NAME); } @Test diff --git a/jib-gradle-plugin/src/test/java/com/google/cloud/tools/jib/gradle/GradleProjectPropertiesTest.java b/jib-gradle-plugin/src/test/java/com/google/cloud/tools/jib/gradle/GradleProjectPropertiesTest.java index 7698228ab0..7618e8a5c9 100644 --- a/jib-gradle-plugin/src/test/java/com/google/cloud/tools/jib/gradle/GradleProjectPropertiesTest.java +++ b/jib-gradle-plugin/src/test/java/com/google/cloud/tools/jib/gradle/GradleProjectPropertiesTest.java @@ -69,6 +69,7 @@ import org.gradle.api.plugins.JavaPlugin; import org.gradle.api.plugins.JavaPluginExtension; import org.gradle.api.provider.Property; +import org.gradle.api.tasks.SourceSet; import org.gradle.api.tasks.bundling.War; import org.gradle.jvm.tasks.Jar; import org.gradle.testfixtures.ProjectBuilder; @@ -168,7 +169,8 @@ public void setUp() throws URISyntaxException, IOException { mockLogger, mockTempDirectoryProvider, mockExtensionLoader, - JavaPlugin.RUNTIME_CLASSPATH_CONFIGURATION_NAME); + JavaPlugin.RUNTIME_CLASSPATH_CONFIGURATION_NAME, + SourceSet.MAIN_SOURCE_SET_NAME); } @Test @@ -219,7 +221,10 @@ public void testGetInputFiles() throws URISyntaxException { List extraDirectories = Arrays.asList(applicationDirectory.resolve("extra-directory")); FileCollection fileCollection = GradleProjectProperties.getInputFiles( - project, extraDirectories, JavaPlugin.RUNTIME_CLASSPATH_CONFIGURATION_NAME); + project, + extraDirectories, + JavaPlugin.RUNTIME_CLASSPATH_CONFIGURATION_NAME, + SourceSet.MAIN_SOURCE_SET_NAME); assertThat(fileCollection) .comparingElementsUsing(FILE_PATH_OF) @@ -341,7 +346,8 @@ public void testCreateContainerBuilder_noClassesFiles() mockLogger, mockTempDirectoryProvider, mockExtensionLoader, - JavaPlugin.RUNTIME_CLASSPATH_CONFIGURATION_NAME); + JavaPlugin.RUNTIME_CLASSPATH_CONFIGURATION_NAME, + SourceSet.MAIN_SOURCE_SET_NAME); gradleProjectProperties.createJibContainerBuilder( JavaContainerBuilder.from(RegistryImage.named("base")), ContainerizingMode.EXPLODED); diff --git a/jib-plugins-common/src/main/java/com/google/cloud/tools/jib/plugins/common/PropertyNames.java b/jib-plugins-common/src/main/java/com/google/cloud/tools/jib/plugins/common/PropertyNames.java index 14e27c2ed3..e660da5d7c 100644 --- a/jib-plugins-common/src/main/java/com/google/cloud/tools/jib/plugins/common/PropertyNames.java +++ b/jib-plugins-common/src/main/java/com/google/cloud/tools/jib/plugins/common/PropertyNames.java @@ -59,6 +59,7 @@ public class PropertyNames { public static final String OUTPUT_PATHS_TAR = "jib.outputPaths.tar"; public static final String CONTAINERIZING_MODE = "jib.containerizingMode"; public static final String CONFIGURATION_NAME = "jib.configurationName"; + public static final String SOURCE_SET_NAME = "jib.sourceSetName"; public static final String SKIP = "jib.skip"; public static final String CONTAINERIZE = "jib.containerize";