Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -91,16 +91,16 @@ public void listFiles() throws IOException {

Set<File> projectDependencyJars = new HashSet<>();
for (ProjectDependency projectDependency : projectDependencies) {
addProjectFiles(projectDependency.getDependencyProject());
Project dependentProject = getDependentProject(projectDependency);
addProjectFiles(dependentProject);

// Keep track of project dependency jars for filtering out later
String configurationName = projectDependency.getTargetConfiguration();
if (configurationName == null) {
configurationName = "default";
}
Project dependencyProject = projectDependency.getDependencyProject();
for (Configuration targetConfiguration :
dependencyProject.getConfigurations().getByName(configurationName).getHierarchy()) {
dependentProject.getConfigurations().getByName(configurationName).getHierarchy()) {
for (PublishArtifact artifact : targetConfiguration.getArtifacts()) {
projectDependencyJars.add(artifact.getFile());
}
Expand Down Expand Up @@ -142,8 +142,7 @@ private void addGradleFiles(Project project) {
skaffoldFilesOutput.addBuild(project.getBuildFile().toPath());

// Add settings.gradle
if (GradleVersion.current().compareTo(GRADLE_9) < 0
&& project.getGradle().getStartParameter().getSettingsFile() != null) {
if (isBeforeGradle9() && project.getGradle().getStartParameter().getSettingsFile() != null) {
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

this was removed in gradle9, so reflection needs to be used here as well

https://docs.gradle.org/current/userguide/upgrading_major_version_9.html#removal_of_custom_build_layout_options

skaffoldFilesOutput.addBuild(
project.getGradle().getStartParameter().getSettingsFile().toPath());
} else if (Files.exists(projectPath.resolve(Settings.DEFAULT_SETTINGS_FILE))) {
Expand Down Expand Up @@ -212,7 +211,7 @@ private Set<ProjectDependency> findProjectDependencies(Project project) {
// If this is a project dependency, save it
ProjectDependency projectDependency = (ProjectDependency) dependency;
if (!projectDependencies.contains(projectDependency)) {
projects.push(projectDependency.getDependencyProject());
projects.push(getDependentProject(projectDependency));
projectDependencies.add(projectDependency);
}
}
Expand All @@ -222,4 +221,36 @@ private Set<ProjectDependency> findProjectDependencies(Project project) {
}
return projectDependencies;
}

/**
* Resolves a {@link ProjectDependency} to its corresponding {@link Project} instance.
*
* <p>This method handles the removal of {@code ProjectDependency.getDependencyProject()} in
* Gradle 9.0 by falling back to {@code getPath()} and resolving it via the project hierarchy.
*
* @param projectDependency the project dependency to resolve
* @return the resolved project
* @throws RuntimeException if the dependent project could not be resolved
*/
private Project getDependentProject(ProjectDependency projectDependency) {
if (isBeforeGradle9()) {
return projectDependency.getDependencyProject();
}
try {
String path =
(String) projectDependency.getClass().getMethod("getPath").invoke(projectDependency);
return getProject().project(path);
} catch (ReflectiveOperationException ex) {
throw new RuntimeException("Failed to get dependent project from " + projectDependency, ex);
}
}

/**
* Checks if the current Gradle version is older than 9.0.
*
* @return {@code true} if the current Gradle version is less than 9.0, {@code false} otherwise
*/
private static boolean isBeforeGradle9() {
return GradleVersion.current().compareTo(GRADLE_9) < 0;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,10 @@ public class FilesTaskV2Test {

@ClassRule public static final TestProject multiTestProject = new TestProject("multi-service");

@ClassRule
public static final TestProject multiTestProjectGradle9 =
new TestProject("multi-service").withGradleVersion("9.0");

@ClassRule
public static final TestProject platformProject =
new TestProject("platform").withGradleVersion("5.2");
Expand Down Expand Up @@ -188,4 +192,33 @@ public void testFilesTast_withConfigModifiers() throws IOException {
assertPathListsAreEqual(
ImmutableList.of(projectRoot.resolve("src/main/jib/bar")), result.getIgnore());
}

@Test
public void testFilesTask_multiProjectComplexService_gradle9() throws IOException {
Path projectRoot = multiTestProjectGradle9.getProjectRoot();
Path complexServiceRoot = projectRoot.resolve("complex-service");
Path libRoot = projectRoot.resolve("lib");
SkaffoldFilesOutput result =
new SkaffoldFilesOutput(verifyTaskSuccess(multiTestProjectGradle9, "complex-service"));
assertPathListsAreEqual(
ImmutableList.of(
projectRoot.resolve("build.gradle"),
projectRoot.resolve("settings.gradle"),
projectRoot.resolve("gradle.properties"),
complexServiceRoot.resolve("build.gradle"),
libRoot.resolve("build.gradle")),
result.getBuild());
assertPathListsAreEqual(
ImmutableList.of(
complexServiceRoot.resolve("src/main/extra-resources-1"),
complexServiceRoot.resolve("src/main/extra-resources-2"),
complexServiceRoot.resolve("src/main/java"),
complexServiceRoot.resolve("src/main/other-jib"),
libRoot.resolve("src/main/resources"),
libRoot.resolve("src/main/java"),
complexServiceRoot.resolve(
"local-m2-repo/com/google/cloud/tools/tiny-test-lib/0.0.1-SNAPSHOT/tiny-test-lib-0.0.1-SNAPSHOT.jar")),
result.getInputs());
assertThat(result.getIgnore()).isEmpty();
}
}
Loading