bazel run *_deploy.jar 失败并显示“无法执行二进制文件”

问题描述 投票:0回答:2

鉴于以下

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
java macos bazel
2个回答
0
投票

这正在按预期工作。

bazel run
实际上并不执行部署 jar,而是一个存根脚本,它为由目标依赖关系图确定的 jar 设置运行时环境。如果您将文件标签(例如
//x/y:deploy.jar
)传递给
bazel run
,Bazel 将尝试将其作为独立的二进制文件执行,而无需
java -jar


0
投票

这有点旧了,但我最近遇到了这个。你只是

bazel run --run_under='java -jar' //path:target_deploy.jar
© www.soinside.com 2019 - 2024. All rights reserved.