我目前正在尝试用使用不同Java语言级别的项目构建一个Bazel0.11.1工作区。实际的应用程序使用Java 7,但是对于一些不会发布的代码,我想使用最新的Java版本,以便能够使用新的语言特性。
我可以在一定程度上通过在--javacopt中使用.bazelrc、设置-source 1.7 -target 1.7和用javacopts属性覆盖项目级别上的缺省值来解决这个问题,但这不足以确保使用更新的javacopts版本进行编译时具有适当的Java7兼容性。为此,我还需要针对Java 7类路径编译Java 7项目。
使用自定义引导路径的唯一方法似乎是通过java_toolchain。它起作用了。但是,我无法找到一种方法来为不同的项目使用不同的引导路径,因为工具链影响到所有项目,而且与javacopts不同,不能在项目级别上重写。
这是一种使用程序,根本就不是(目前为止)吗?可能和巴泽尔在一起吗?还是有什么诡计让它起作用?
发布于 2018-04-09 20:17:51
结果发现有一种方法:编写执行编译的自定义规则。
java_common模块为编译器提供了一个接口。
library.bzl
def _impl(ctx):
deps = []
for dep in ctx.attr.deps:
if java_common.provider in dep:
deps.append(dep[java_common.provider])
output_jar = ctx.new_file("lib{0}.jar".format(ctx.label.name))
runtime = java_common.JavaRuntimeInfo
compilation_provider = java_common.compile(
ctx,
source_jars = ctx.files.srcs_jars,
source_files = ctx.files.srcs,
output = output_jar,
javac_opts = ctx.attr.javac_opts,
deps = deps,
strict_deps = ctx.attr.strict_deps,
java_toolchain = ctx.attr.toolchain,
host_javabase = ctx.attr._host_javabase,
resources = ctx.files.resources,
neverlink = ctx.attr.neverlink,
)
return struct(
files = depset([output_jar]),
providers = [compilation_provider],
)
library = rule(
implementation = _impl,
attrs = {
"srcs_jars": attr.label_list(allow_files=True),
"srcs": attr.label_list(allow_files=True),
"javac_opts": attr.string_list(default=[]),
"deps": attr.label_list(),
"strict_deps": attr.string(default="ERROR"),
"toolchain": attr.label(default=Label("@bazel_tools//tools/jdk:toolchain")),
"sourcepath": attr.label_list(),
"resources": attr.label_list(),
"neverlink": attr.bool(default=False),
"_host_javabase": attr.label(default=Label("@local_jdk//:jdk")),
},
fragments = ["java"],
)我现在可以使用这个规则来设置不同的编译工具链。
BUILD
load('//build/jdk:library.bzl', 'library')
library(
name = "test",
srcs = glob(["src/main/java/**/*.java"]),
# data = glob(["src/main/resources/**"]),
toolchain = "//build/jdk:jdk8",
deps = ["..."],
)不幸的是我还没到100%。java_common.compile似乎与java_library的data属性没有等效之处,但在大多数情况下,工具链问题已经得到解决。
https://stackoverflow.com/questions/49722912
复制相似问题