我怎样才能让 Bazel 为与主机不同的架构包含一个 JRE?
How can I get Bazel to include a JRE for a different architecture from the host computer?
我希望能够使用 Bazel 将 Java 应用程序从我的 linux 工作站交叉编译到我的 Raspberry Pi。
我 运行 遇到的根本问题似乎是生成的启动脚本引用了 运行 文件目录中的 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 的 correct/expected 方法是什么?
您可以使用 --javabase 参数指定用于目标配置的 JVM (Raspberry Pi),并使用 --host_javabase 参数指定在构建期间使用的 JVM。
如果您将 --javabase 指向一个 java_runtime 规则,该规则说明 JVM 在 Raspberry PI 上的位置,它应该可以工作。
我希望能够使用 Bazel 将 Java 应用程序从我的 linux 工作站交叉编译到我的 Raspberry Pi。
我 运行 遇到的根本问题似乎是生成的启动脚本引用了 运行 文件目录中的 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 的 correct/expected 方法是什么?
您可以使用 --javabase 参数指定用于目标配置的 JVM (Raspberry Pi),并使用 --host_javabase 参数指定在构建期间使用的 JVM。
如果您将 --javabase 指向一个 java_runtime 规则,该规则说明 JVM 在 Raspberry PI 上的位置,它应该可以工作。