如何让Bazel在主机上包含不同架构的JRE?

时间:2017-05-29 23:03:14

标签: java bazel

我希望能够使用Bazel将Java应用程序从我的linux工作站交叉编译到我的Raspberry Pi。

我遇到的根本问题似乎是生成的启动脚本引用了runfiles目录中的java启动程序,并根据主机将这些二进制文件打包。

简单地设置--cpu到armeabi-v7a似乎没有任何效果,即使我可以让CROSSTOOLS使用Linaro工具链来构建C ++二进制文件,我也找不到任何会显示的文档我如何用类似的替代Java工具。

我花了一些时间摆弄java_runtime,java_runtime_suite和java_toolchain规则,但遇到的问题是,虽然我可以设置java_toolchain,但我似乎无法独立地展示主机和目标java架构 - 只是版本

如果我修改Java启动器脚本并将JAVABIN硬编码为“/ usr / bin / java”一切正常(示例GPRC“greeter server”正确响应),所以我觉得我真的不是那么遥远有一个可用的设置。我意识到我可以提供一个只将所有内容传递给/ usr / bin / java的启动器,但我喜欢Bazel构建的自包含特性,并且更喜欢在其结构中工作。

那么,我错过了什么?使用Bazel交叉编译Java的正确/预期方法是什么?

1 个答案:

答案 0 :(得分:2)

您可以使用--javabase参数指定用于目标配置的JVM(Raspberry Pi)和--host_javabase参数,以指定在构建期间使用的JVM。

如果你将--javabase指向一个java_runtime规则,告诉它在Raspberry PI上找到JVM的位置,它应该可以工作。