我想将ant构建迁移到Bazel4.2.1。ant构建使用Eclipse编译器(ECJ-3.27.0)。
在Bazel中声明Java编译器的方法是java_toolchain
。
因此,我查看了bazel query@bazel_tools//tools/jdk:all
的输出,并尝试使用vanilla工具链作为灵感(bazelisk query--output=build@bazel_tools//tools/jdk:toolchain_vanilla
)。
java_toolchain(
# modified settings
name = "my-ecj-toolchain",
javabuilder = ["@ecj//:ecj.jar"], # my Eclipse compiler jar
target_version = "8",
# prevent ecj.jar's error message 'unknown option --persistent_workers'
javac_supports_workers = False,
# prevent ecj.jar's error message 'unknown option --persistent_workers'
javac_supports_multiplex_workers = False,
# keeping most vanilla-toolchain settings
bootclasspath = ["@bazel_tools//tools/jdk:platformclasspath"],
misc = ["-XDskipDuplicateBridges=true", "-XDcompilePolicy=simple", "-g", "-parameters"],
jvm_opts = [],
tools = ["@bazel_tools//tools/jdk:javac_jar", "@bazel_tools//tools/jdk:java_compiler_jar", "@bazel_tools//tools/jdk:jdk_compiler_jar"],
singlejar = ["@bazel_tools//tools/jdk:singlejar"],
forcibly_disable_header_compilation = True,
genclass = ["@bazel_tools//tools/jdk:genclass"],
ijar = ["@bazel_tools//tools/jdk:ijar"],
header_compiler = ["@bazel_tools//tools/jdk:turbine_direct"],
header_compiler_direct = ["@bazel_tools//tools/jdk:turbine_direct"],
jacocorunner = "@bazel_tools//tools/jdk:JacocoCoverageFilegroup",
)
Bazel aquery MyTarget
显示整个编译器命令行(加上更多构建步骤):
Command Line: (exec external/remotejdk11_linux/bin/java \
-jar \
external/ecj/ecj.jar \
--output \
bazel-out/k8-opt/bin/[...].jar \
--native_header_output \
bazel-out/k8-opt/bin/[...]-native-header.jar \
--output_manifest_proto \
bazel-out/k8-opt/bin/[...].jar_manifest_proto \
--compress_jar \
--output_deps_proto \
bazel-out/k8-opt/bin/[...].jdeps \
--bootclasspath \
bazel-out/k8-opt/bin/external/bazel_tools/tools/jdk/platformclasspath.jar \
--sources \
bazel-out/k8-opt/bin/[...].java \
--javacopts \
-target \
8 \
'-XDskipDuplicateBridges=true' \
'-XDcompilePolicy=simple' \
-g \
-parameters \
-g \
-- \
--target_label \
bazel-out/k8-opt/bin/[...]:[...] \
--strict_java_deps \
ERROR \
--direct_dependencies \
[...]
我不知道有哪个Java编译器接受--output
。是否必须以不同的方式传递ecj.jar
?
我不知道有哪个Java编译器接受--output。
实际上,Bazel并不直接调用OpenJDK的javac可执行文件,而是调用其在javac
名为buildjar
的API上的包装器。在Bazel文档中有一些关于这一点的内容;buildjar
支持Bazel的一些更好的Java特性。
因此,您必须为EJC提供与buildjar
兼容的包装器。这种实现最接近的起点可能是VanillaJavaBuilder
,它用于OpenJDK的javac
,而不是在普通的buildjar
实现中使用任何侵入性的API。
null 看起来bazel在cc_test和android toolchain上有问题 有什么方法可以使用Bazel为android构建和运行一个可执行文件吗?也许我错过了一些命令行参数 编辑:
本文向大家介绍使用Bazel编译TensorBoard教程,包括了使用Bazel编译TensorBoard教程的使用技巧和注意事项,需要的朋友参考一下 1.TensorBoard Tensorboard是一套用于查看和理解TensorFlow运行情况的工具,有时可能现有的功能并不能满足我们当前的需求,那么则需要我们对Tensorboard进行定制化开发,定制化的第一步就是编译源码。 TensorB
问题内容: 我有一个项目,我现在开始作为Maven项目,但是由于某种原因,它无法正常工作。这是我的pom.xml: 问题答案: 实际上,您的POM看起来有点奇怪: 它缺少Webapp项目的权利。 Maven War插件配置看起来不正确,您只是不需要添加的额外内容。 这是最小pom的样子: 因此,要么修改它,然后更新项目配置( 右键单击 您的项目,然后 右键单击 Maven >更新项目配置)。 或者
在NodeJS项目中使用Bazel最简单的方法是什么,有些项目可能是用其他语言编写的?另外,是否有一个例子在某处Bazel被用于多回购设置? 谢了!
问题内容: 我需要使用已“定制”的特殊JRE批处理编译。 Eclipse可以使用此JRE编译类,但是我需要在Eclipse之外制作一个构建脚本。 Eclipse使用什么方法在没有JDK的情况下生成.class文件? 问题答案: Eclipse具有其自己的编译器,其原因如下: 增量编译(可以仅编译项目的更改部分,这可能意味着比刚刚保存的文件数量更多,例如,当您更改某些全局变量时) 即使代码包含错误,
webpack配置 下图是采用 Mpx 开发小程序时,一个简短的 webpack 配置。配置说明可参考图中注释以及子项说明。 module.exports = { entry: { app: resolveSrc('app.mpx') }, output: { // 和 webpack 配置一致,编译后文件输出的路径 path: resolveDist(),