鉴于以下
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版本信息:
$ 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
这正在按预期工作。
bazel run
实际上并不执行部署 jar,而是一个存根脚本,它为由目标依赖关系图确定的 jar 设置运行时环境。如果您将文件标签(例如 //x/y:deploy.jar
)传递给 bazel run
,Bazel 将尝试将其作为独立的二进制文件执行,而无需 java -jar
。
这有点旧了,但我最近遇到了这个。你只是
bazel run --run_under='java -jar' //path:target_deploy.jar