Bazel@HEAD doesn't support Java 10 any more. The tool chain is extended
to support building with Java 10 using host_javabase option and vanilla
java builder. To use --host_javabase option we have to provide absolute
path to the JDK 10. To keep that non-portable part out of the build file
we use variable that is substitued during build invocation. Say, the
location of the JDK 10 is: /usr/lib64/jvm/java-10, then the build is
invoked with:
$ bazel build --host_javabase=:absolute_javabase \
--define=ABSOLUTE_JAVABASE=/usr/lib64/jvm/java-10 ...
Given that absolute_javabase rule is not a part of released Bazel yet,
but will be only included in future Bazel releases, we have to add it in
our own build file:
java_runtime(
name = "absolute_javabase",
java_home = "$(ABSOLUTE_JAVABASE)",
visibility = ["//visibility:public"],
)
While this works, it fails the Gerrit-CI, because recently it was
changed to exercise //... rule, and cannot resolve ABSOLUTE_JAVABASE
variable, because it wasn't provided in the CI environment. CI is still
using Java 8.
One approach to address that problem would be to use "manual" tag for a
rule that would exclude it from generic targets like //..., but
unfortunately, java_runtime rule doesn't expose tag attribute.
The next workaround is to hide that variable behind a select statement.
This is a harmless hack:
config_setting(
name = "use_absolute_javabase",
values = {"define": "USE_ABSOLUTE_JAVABASE=true"},
)
java_runtime(
name = "absolute_javabase",
java_home = select({
":use_absolute_javabase": "$(ABSOLUTE_JAVABASE)",
"//conditions:default": "",
}),
visibility = ["//visibility:public"],
)
Now from the CI the rule: //:absolute_javabase would produce non working
java_runtime, because java_home wasn't specified, but given that this
java_runtime is not used during the build, it doesn't matter. Add also
a TODO comment to replace that interim solution when absolute_javabase
is supported in released Bazel version. As the consequence for hiding
that rule behind a condition, we need to provide additional variable so
that Bazel can correctly resolve java_home in java_runtime rule:
$ bazel build --host_javabase=:absolute_javabase \
--define=ABSOLUTE_JAVABASE=/usr/lib64/jvm/java-10 \
--define=USE_ABSOLUTE_JAVABASE=true [...]
Also extend tools/eclipse/project.py to accept Java 10 specific options.
There is already --java <jdk number> option that was added recently to
support Eclipse .classpath generation when JDK 9 is used, but this can
not be used, because for Java 10 we have to provide absolute path to the
Java 10 location. Add new option --edge_java where all Java 10 specific
options can be passed:
$ tools/eclipse/project.py --edge_java \
"--host_javabase=:absolute_javabase \
--define=ABSOLUTE_JAVABASE=/usr/lib64/jvm/java-10 \
--define=USE_ABSOLUTE_JAVABASE=true \
--host_java_toolchain=//:toolchain_vanilla \
--java_toolchain=//:toolchain_vanilla"
Alternative approach would be to add those options to Bazel resource
file.
Test Plan:
$ bazel build --host_javabase=:absolute_javabase \
--define=ABSOLUTE_JAVABASE=/usr/lib64/jvm/java-10 \
--define=USE_ABSOLUTE_JAVABASE=true \
--host_java_toolchain=//:toolchain_vanilla \
--java_toolchain=//:toolchain_vanilla \
:release
and replace ABSOLUTE_JAVABASE variable with the location of JDK 10.
To verify that major version of generated classes is 54, use:
$ $JAVA_HOME/bin/javap -verbose \
-cp bazel-bin/java/com/google/gerrit/common/libserver.jar \
com.google.gerrit.common.data.ProjectAccess | grep "major version"
54
[1] https://github.com/bazelbuild/bazel/issues/6012
Change-Id: I5e652f7a19afbcf3607febd9a7a165dc07918bd0
124 lines
3.2 KiB
Python
124 lines
3.2 KiB
Python
package(default_visibility = ["//visibility:public"])
|
|
|
|
load("//tools/bzl:genrule2.bzl", "genrule2")
|
|
load("//tools/bzl:pkg_war.bzl", "pkg_war")
|
|
load(
|
|
"@bazel_tools//tools/jdk:default_java_toolchain.bzl",
|
|
"default_java_toolchain",
|
|
)
|
|
|
|
config_setting(
|
|
name = "java9",
|
|
values = {
|
|
"java_toolchain": "@bazel_tools//tools/jdk:toolchain_java9",
|
|
},
|
|
)
|
|
|
|
config_setting(
|
|
name = "java10",
|
|
values = {
|
|
"java_toolchain": ":toolchain_vanilla",
|
|
},
|
|
)
|
|
|
|
# TODO(davido): Switch to consuming it from @bazel_tool//tools/jdk:absolute_javabase
|
|
# when new Bazel version is released with this change included:
|
|
# https://github.com/bazelbuild/bazel/issues/6012
|
|
# https://github.com/bazelbuild/bazel/commit/0173bdbf7bdd1874379d4dd3eb70d5321e0f1816
|
|
# As the interim use a hack that works around it by putting the variable reference
|
|
# behind a select
|
|
config_setting(
|
|
name = "use_absolute_javabase",
|
|
values = {"define": "USE_ABSOLUTE_JAVABASE=true"},
|
|
)
|
|
|
|
java_runtime(
|
|
name = "absolute_javabase",
|
|
java_home = select({
|
|
":use_absolute_javabase": "$(ABSOLUTE_JAVABASE)",
|
|
"//conditions:default": "",
|
|
}),
|
|
visibility = ["//visibility:public"],
|
|
)
|
|
|
|
# TODO(davido): Switch to consuming it from @bazel_tool//tools/jdk:toolchain_vanilla
|
|
# when my change is included in released Bazel version:
|
|
# https://github.com/bazelbuild/bazel/commit/0bef68e054eccecd690e5d9f46db8a0c4b2d887a
|
|
default_java_toolchain(
|
|
name = "toolchain_vanilla",
|
|
forcibly_disable_header_compilation = True,
|
|
javabuilder = ["@bazel_tools//tools/jdk:VanillaJavaBuilder_deploy.jar"],
|
|
jvm_opts = [],
|
|
)
|
|
|
|
genrule(
|
|
name = "gen_version",
|
|
outs = ["version.txt"],
|
|
cmd = ("cat bazel-out/volatile-status.txt bazel-out/stable-status.txt | " +
|
|
"grep STABLE_BUILD_GERRIT_LABEL | cut -d ' ' -f 2 > $@"),
|
|
stamp = 1,
|
|
visibility = ["//visibility:public"],
|
|
)
|
|
|
|
genrule(
|
|
name = "LICENSES",
|
|
srcs = ["//Documentation:licenses.txt"],
|
|
outs = ["LICENSES.txt"],
|
|
cmd = "cp $< $@",
|
|
visibility = ["//visibility:public"],
|
|
)
|
|
|
|
pkg_war(
|
|
name = "gerrit",
|
|
ui = "polygerrit",
|
|
)
|
|
|
|
pkg_war(
|
|
name = "headless",
|
|
ui = None,
|
|
)
|
|
|
|
pkg_war(
|
|
name = "polygerrit",
|
|
ui = "polygerrit",
|
|
)
|
|
|
|
pkg_war(
|
|
name = "release",
|
|
context = ["//plugins:core"],
|
|
doc = True,
|
|
ui = "ui_optdbg_r",
|
|
)
|
|
|
|
pkg_war(
|
|
name = "withdocs",
|
|
doc = True,
|
|
)
|
|
|
|
API_DEPS = [
|
|
"//java/com/google/gerrit/acceptance:framework_deploy.jar",
|
|
"//java/com/google/gerrit/acceptance:libframework-lib-src.jar",
|
|
"//java/com/google/gerrit/acceptance:framework-javadoc",
|
|
"//java/com/google/gerrit/extensions:extension-api_deploy.jar",
|
|
"//java/com/google/gerrit/extensions:libapi-src.jar",
|
|
"//java/com/google/gerrit/extensions:extension-api-javadoc",
|
|
"//plugins:plugin-api_deploy.jar",
|
|
"//plugins:plugin-api-sources_deploy.jar",
|
|
"//plugins:plugin-api-javadoc",
|
|
"//gerrit-plugin-gwtui:gwtui-api_deploy.jar",
|
|
"//gerrit-plugin-gwtui:gwtui-api-source_deploy.jar",
|
|
"//gerrit-plugin-gwtui:gwtui-api-javadoc",
|
|
]
|
|
|
|
genrule2(
|
|
name = "api",
|
|
testonly = 1,
|
|
srcs = API_DEPS,
|
|
outs = ["api.zip"],
|
|
cmd = " && ".join([
|
|
"cp $(SRCS) $$TMP",
|
|
"cd $$TMP",
|
|
"zip -qr $$ROOT/$@ .",
|
|
]),
|
|
)
|