Skip to content

Commit e5d29a1

Browse files
committed
use nested classes.jar as source for mergejars
1 parent 8a02626 commit e5d29a1

File tree

2 files changed

+14
-3
lines changed

2 files changed

+14
-3
lines changed

.bazelrc

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
build --experimental_google_legacy_api
2+
13
build --java_language_version=11
24
build --java_runtime_version=remotejdk_11
35

private/tools/java/com/github/bazelbuild/rules_jvm_external/jar/MergeJars.java

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -102,17 +102,26 @@ public static void main(String[] args) throws IOException {
102102
}
103103
}
104104

105+
Objects.requireNonNull(out, "Output path must be set.");
105106
if (packaging == Packaging.AAR) {
106107
aarSource = sources.stream()
107108
.filter(source -> aarMatcher.matches(source.getFileName()))
108109
.findFirst() // AAR is explicitly only added for top level distribution target, so we _should_ only ever have 1
109110
.orElseThrow(() -> new IllegalArgumentException("For AAR packaging, we require a prebuilt AAR that already contains the Android resources that we'll add the transitive source closure to."));
110111

111112
sources.remove(aarSource);
112-
}
113113

114-
Objects.requireNonNull(out, "Output path must be set.");
115-
if (sources.isEmpty()) {
114+
// Pull out classes jar and add to source set
115+
Path aarClassesJar = out.getParent().resolve("aar-classes.jar");
116+
try (ZipFile aar = new ZipFile(aarSource.toFile())) {
117+
ZipEntry classes = aar.getEntry("classes.jar");
118+
try (InputStream is = aar.getInputStream(classes);
119+
OutputStream fos = Files.newOutputStream(aarClassesJar)) {
120+
ByteStreams.copy(is, fos);
121+
}
122+
}
123+
sources.add(aarClassesJar);
124+
} else if (sources.isEmpty()) {
116125
// Just write an empty jar and leave
117126
try (OutputStream fos = Files.newOutputStream(out);
118127
JarOutputStream jos = new JarOutputStream(fos)) {

0 commit comments

Comments
 (0)