rules_scala icon indicating copy to clipboard operation
rules_scala copied to clipboard

Inconsistent behavior when `resource_strip_prefix` is unspecified between scala_library and java_library

Open wisechengyi opened this issue 2 years ago • 0 comments

Problem

java_library and scala_library produce jars with different layout for the same resources. Note this only happens for certain path patterns, such as a path contains resources/ and src/test/resources/ at the same time.

For example,

diff --git a/tools/resources/BUILD.bazel b/tools/resources/BUILD.bazel
new file mode 100644
index 0000000000000..1de99f6e6591f
--- /dev/null
+++ b/tools/resources/BUILD.bazel
@@ -0,0 +1,19 @@
+load("@rules_java//java:defs.bzl", "java_library")
+load("//tools/build_rules/targets:scala_library.bzl", "scala_library")
+
+java_library(
+    name = "java",
+    resources = glob(["**/*.txt"])
+)
+
+
+scala_library(
+    name = "scala",
+    resources = [":f"]
+)
+
+filegroup(
+    name = "f",
+    srcs = ["src/test/resources/a/b/xxx.txt"]
+)
+
diff --git a/tools/resources/src/test/resources/a/b/xxx.txt b/tools/resources/src/test/resources/a/b/xxx.txt
new file mode 100644
index 0000000000000..e69de29bb2d1d

Java is correct:

$ bazel build tools/resources:java
...
$ unzip -Z1 bazel-bin/tools/resources/libjava.jar
META-INF/
META-INF/MANIFEST.MF
a/
a/b/
a/b/xxx.txt

Scala is incorrect:

$ bazel build tools/resources:scala
...
$ unzip -Z1 bazel-bin/tools/resources/scala.jar
src/test/resources/a/b/xxx.txt
META-INF/MANIFEST.MF

because scala_library cuts at the first resources/ seen on the path, rather than at src/test/resources/

wisechengyi avatar Jan 05 '22 17:01 wisechengyi