在当前设置中,我们使用Bazel作为整体构建工具,但对于单个Java项目,我们使用Maven进行构建。 Java项目的示例构建规则如下所示:
genrule (
name = "build-core",
srcs = [
":deps-core",
],
outs = [
"core-1.0.jar",
],
cmd = "rm -rf $(@D)/src && cd project/ && umask 0000"
+ " && mvn -U clean install -Djavacpp.platform=linux-x86_64 -pl :core"
+ " && cp core/target/core-1.0.jar ../$(@D)"
)
您会注意到,我们目前正在将-Djavacpp.platform
硬编码为linux-x86_64
。是否有一种方法可以从Bazel中自动获取此值(也许作为变量),以便我们也可以使用相同的构建规则在MacOSX和Windows系统上进行构建?
答案 0 :(得分:0)
最好直接使用Bazel构建所有库,然后您将免费获得此行为。参见Migrating from Maven to Bazel。
但是,如果不是这样,您可以使用Make Variables访问此信息的一些:
genrule(
name = "g",
outs = [
"g.txt",
],
cmd = "echo \"$(TARGET_CPU) $(COMPILATION_MODE) $(JAVA) $(JAVABASE)\" > $@",
toolchains = [
"@bazel_tools//tools/jdk:current_java_runtime",
],
)
但是,在这些变量中我找不到操作系统。
也许更好的主意是使用select
语句:
genrule(
name = "f",
outs = [
"f.txt",
],
cmd = select({
"@bazel_tools//src/conditions:darwin": "echo 'macOS' > $@",
"//conditions:default": "echo 'Linux' > $@",
}),
)
然后,您将为每个平台写一个不同的cmd
。