Bazel:如何将文件相对路径作为参数传递给java_binary规则?
解决Bazel java_binary中资源文件路径参数的问题
在Bazel构建体系中,直接使用源码目录的相对路径作为args参数会失败——因为Bazel的沙箱运行机制下,构建和运行时的文件布局与源码目录结构不一致,源码里的相对路径在运行时环境中无效。
正确的处理方式分两步:
将资源文件声明为
data依赖
把hello.txt加入data列表,Bazel会自动将该文件复制到运行时的输出目录,确保程序能访问到它。使用Bazel路径变量引用文件
在args中用$(location)或$(rootpath)变量获取文件的运行时有效路径,这两个变量会被Bazel自动替换为对应环境下的实际路径。
修改后的配置示例:
java_binary( name = "Hello", srcs = glob(["src/main/java/**"]), args = ["$(location src/main/resources/hello.txt)"], data = ["src/main/resources/hello.txt"], deps = [...], )
变量说明
$(location <文件路径>):返回相对于当前目标运行工作目录的路径$(rootpath <文件路径>):返回相对于Bazel工作区根目录的路径
如果资源文件属于其他Bazel包,需要使用完整的标签路径(比如//my/resources:hello.txt),对应的变量写法为$(location //my/resources:hello.txt)。
内容的提问来源于stack exchange,提问作者90abyss
相关产品推荐
相关产品推荐

