给出以下BUILD
文件
java_library(
name='target_lib',
srcs=['target.java',],
)
java_binary(
name='target',
runtime_deps=[':target_lib',],
main_class='com.example.target',
)
我可以在bazel run //path:target
上执行java_binary
,并成功执行我的应用程序;但是,在尝试执行bazel run //path:target_deploy.jar
时会失败,并显示“无法执行二进制文件”
我正在MacOS上尝试这样做(如果有问题的话)
如果我手动尝试执行java -jar bazel-bin/path/target_deploy.jar
,我也会发现清单未指定main_class
。不确定是否相关。
挡板版本信息:
$ bazel version
Build label: 0.26.1-homebrew
Build target: bazel-out/darwin-opt/bin/src/main/java/com/google/devtools/build/lib/bazel/BazelServer_deploy.jar
Build time: Thu Jun 6 18:36:29 2019 (1559846189)
Build timestamp: 1559846189
Build timestamp as int: 1559846189
答案 0 :(得分:0)
这按预期工作。 bazel run
实际上并不执行部署jar,而是一个存根脚本,该脚本为目标的依赖关系图确定的jar设置运行时环境。如果您将文件标签(例如//x/y:deploy.jar
)传递给bazel run
,Bazel将尝试以无java -jar
的独立二进制文件的形式执行它。