rules_scala
rules_scala copied to clipboard
Inconsistent behavior when `resource_strip_prefix` is unspecified between scala_library and java_library
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/