Skip to content

Commit b97ac66

Browse files
committed
Replace -b with rootProject.buildFileName for Gradle 9 support
Gradle 9 dropped -b. When the caller passes a build file at a non-conventional location, write a temporary settings.gradle with only rootProject.buildFileName, deleting it in the same finally block as the init script.
1 parent 128b9c7 commit b97ac66

1 file changed

Lines changed: 19 additions & 4 deletions

File tree

rewrite-gradle-tooling-model/model/src/main/java/org/openrewrite/gradle/toolingapi/OpenRewriteModelBuilder.java

Lines changed: 19 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -90,16 +90,28 @@ public static OpenRewriteModel forProjectDirectory(File projectDir, @Nullable Fi
9090
// .embedded(true)
9191
.forProjectDirectory(projectDir);
9292
List<String> arguments = new ArrayList<>();
93-
if (buildFile != null && buildFile.exists()) {
94-
arguments.add("-b");
95-
arguments.add(buildFile.getAbsolutePath());
96-
}
9793
arguments.add("--init-script");
9894
Path init = projectDir.toPath().resolve("openrewrite-tooling.gradle").toAbsolutePath();
9995
arguments.add(init.toString());
96+
// Gradle 9 dropped -b; point at a non-conventional build file via a temporary settings.gradle.
97+
Path settings = null;
98+
if (buildFile != null && buildFile.exists()) {
99+
File abs = buildFile.getAbsoluteFile();
100+
boolean atConventionalLocation = abs.equals(new File(projectDir, "build.gradle").getAbsoluteFile()) ||
101+
abs.equals(new File(projectDir, "build.gradle.kts").getAbsoluteFile());
102+
Path projectPath = projectDir.toPath();
103+
boolean settingsAlreadyExists = Files.exists(projectPath.resolve("settings.gradle")) ||
104+
Files.exists(projectPath.resolve("settings.gradle.kts"));
105+
if (!atConventionalLocation && !settingsAlreadyExists) {
106+
settings = projectPath.resolve("settings.gradle");
107+
}
108+
}
100109
try (ProjectConnection connection = connector.connect()) {
101110
ModelBuilder<OpenRewriteModelProxy> customModelBuilder = connection.model(OpenRewriteModelProxy.class);
102111
try {
112+
if (settings != null) {
113+
Files.write(settings, ("rootProject.buildFileName = '" + buildFile.getName() + "'\n").getBytes(StandardCharsets.UTF_8));
114+
}
103115
if (initScript == null) {
104116
if (System.getProperty("org.openrewrite.gradle.local.use-embedded-classpath") != null) {
105117
// code path only expected to be taken from within openrewrite/rewrite
@@ -124,6 +136,9 @@ public static OpenRewriteModel forProjectDirectory(File projectDir, @Nullable Fi
124136
if (Files.exists(init)) {
125137
Files.delete(init);
126138
}
139+
if (settings != null && Files.exists(settings)) {
140+
Files.delete(settings);
141+
}
127142
} catch (IOException e) {
128143
//noinspection ThrowFromFinallyBlock
129144
throw new UncheckedIOException(e);

0 commit comments

Comments
 (0)