Skip to content
Open
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
1 change: 1 addition & 0 deletions private/rules/coursier.bzl
Original file line number Diff line number Diff line change
Expand Up @@ -283,6 +283,7 @@ def _java_path(repository_ctx):
def _generate_java_jar_command(repository_ctx, jar_path):
coursier_opts = repository_ctx.os.environ.get("COURSIER_OPTS", "")
coursier_opts = coursier_opts.split(" ") if len(coursier_opts) > 0 else []

# if coursier OOMs from a large dependency tree, have it crash instead of hanging
coursier_opts.append("-XX:+ExitOnOutOfMemoryError")
java_path = _java_path(repository_ctx)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -65,12 +65,14 @@ public void setupProject() throws IOException {
}

public void connect(Path gradlePath) {
System.setProperty("gradle.user.home", gradleCacheDir.toAbsolutePath().toString());
// Use gradleCacheDir as gradle.user.home for complete isolation.
// When RJE_UNSAFE_CACHE is set, the user's caches are symlinked into this directory.
System.setProperty("org.gradle.parallel", "true");
connection =
GradleConnector.newConnector()
.forProjectDirectory(projectDir.toFile())
.useInstallation(gradlePath.toFile())
.useGradleUserHomeDir(gradleCacheDir.toFile())
.connect();
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -450,7 +450,38 @@ private GradleProject setupFakeGradleProject(
Path gradleCacheDir = fakeProjectDirectory.resolve(".gradle");
Files.createDirectories(gradleCacheDir);
if (useUnsafeCache) {
gradleCacheDir = Paths.get(System.getProperty("user.home"), ".gradle");
// Instead of changing gradleCacheDir, symlink the user's caches directory
// This avoids timing issues with gradle.user.home system property
Path userCaches = Paths.get(System.getProperty("user.home"), ".gradle", "caches");
if (Files.isDirectory(userCaches)) {
try {
Path cacheSymlink = gradleCacheDir.resolve("caches");
Files.createSymbolicLink(cacheSymlink, userCaches);
if (isVerbose()) {
eventListener.onEvent(
new LogEvent(
"gradle",
"Using unsafe shared cache",
"Symlinked " + userCaches + " -> " + cacheSymlink));
}
} catch (IOException e) {
// If symlinking fails, fall back to isolated cache
if (isVerbose()) {
eventListener.onEvent(
new LogEvent(
"gradle",
"Failed to create cache symlink, using isolated cache",
e.getMessage()));
}
}
} else if (isVerbose()) {
String reason = Files.exists(userCaches) ? "is not a directory" : "not found";
eventListener.onEvent(
new LogEvent(
"gradle",
"User gradle caches directory " + reason + ", using isolated cache",
"Expected: " + userCaches));
}
}

return new GradleProject(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ java_test(
"//private/tools/java/com/github/bazelbuild/rules_jvm_external/resolver/gradle/data:gradle_build_templates",
],
env = {
"RJE_VERBOSE": "true",
"RJE_VERBOSE": "1",
},
test_class = "com.github.bazelbuild.rules_jvm_external.resolver.gradle.GradleResolverTest",
deps = [
Expand Down