[英]How to specify java META-INF directory and services in bazel?
我正在尝试提供自己的System.LoggerFinder
实现,据我所知,我必须在某些资源文件/resources/META-INF/services/java.lang.System$LoggerFinder
中指定 class 。
现在我的实现位于它自己的 package (包括构建文件和java_library()
作为规则),这与我的java_binary()
所在的 package 和 BUILD 文件不同。我将实现作为deps
添加到二进制文件的 BUILD 文件中并确保 package 使用//visibility:public
,只是为了确保这不是问题。 我尝试将上述文件放入它们两个中,并使用resources = ["resources/META-INF/services/java.lang.System$LoggerFinder"]
将其指定为相应 BUILD 文件中的资源文件,但 bazel 总是抱怨任何一个
'//:resources/META-INF/services/java.lang.System$LoggerFinder'
丢失,resources = ["//resources/META-INF/services/java.lang.System$LoggerFinder"]
代替,则资源目录缺少 BUILD 文件。所以基本上我的问题是:我必须将资源放在哪里以及如何指定它们? 如果我必须将 BUILD 文件添加到资源中,我应该使用什么规则?
谢谢!
一种方法是使用 META-INF 文件夹中的文件创建 jar 文件,并将其添加为 java_library 的依赖项。 jar 的内容应该合并进去。像这样:
java_library(
name = "lib",
srcs = [...],
deps = [":meta_inf_import"],
)
java_import(
name = "meta_inf_import",
jars = [":meta_inf.jar"],
)
genrule(
name = "gen_meta_inf",
srcs = ["java.lang.System$LoggerFinder"],
outs = ["meta_inf.jar"],
cmd = """
mkdir -p META-INF/services
cp $< META-INF/services/
jar -cf $@ .
""",
)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.