Моя мотивация: наша кодовая база разбросана по крайней мере на 20 репозиториях git.Я хочу объединить все в одно git-репо с единой системой сборки.В настоящее время мы используем SBT, но мы думаем, что сборка займет слишком много времени, поэтому я изучаю возможность использования Bazel.
Большая часть нашей кодовой базы использует Scala 2.12, часть нашей кодовой базы использует Scala 2.11, иостальные должны быть собраны под Scala 2.11 и Scala 2.12.
Я пытаюсь использовать bazelbuild / rules_scala .
Со следующим вызовом scala_repositories
в моемWORKSPACE
, я могу построить с помощью Scala 2.12:
scala_repositories(("2.12.6", {
"scala_compiler": "3023b07cc02f2b0217b2c04f8e636b396130b3a8544a8dfad498a19c3e57a863",
"scala_library": "f81d7144f0ce1b8123335b72ba39003c4be2870767aca15dd0888ba3dab65e98",
"scala_reflect": "ffa70d522fc9f9deec14358aa674e6dd75c9dfa39d4668ef15bb52f002ce99fa"
}))
Если вместо этого у меня есть следующий вызов, я могу построить с помощью Scala 2.11:
scala_repositories(("2.11.12", {
"scala_compiler": "3e892546b72ab547cb77de4d840bcfd05c853e73390fed7370a8f19acb0735a0",
"scala_library": "0b3d6fd42958ee98715ba2ec5fe221f4ca1e694d7c981b0ae0cd68e97baf6dce",
"scala_reflect": "6ba385b450a6311a15c918cf8688b9af9327c6104f0ecbd35933cfcd3095fe04"
}))
Однако это невозможноуказать в моих BUILD
файлах на уровне пакета, какую версию Scala собирать.Я должен указать это глобально в моем WORKSPACE
.
Чтобы обойти это, я планирую настроить настраиваемые атрибуты , чтобы я мог указать --define scala=2.11
для сборки с помощью Scala 2.11, иукажите --define scala=2.12
для сборки с помощью Scala 2.12.
Сначала я попытался поместить этот код в мой WORKSPACE
:
config_setting(
name = "scala-2.11",
define_values = {
"scala": "2.11"
}
)
config_setting(
name = "scala-2.12",
define_values = {
"scala": "2.12"
}
)
scala_repositories(
select(
{
"scala-2.11": "2.11.12",
"scala-2.12": "2.12.6"
}
),
select(
{
"scala-2.11": {
"scala_compiler": "3e892546b72ab547cb77de4d840bcfd05c853e73390fed7370a8f19acb0735a0",
"scala_library": "0b3d6fd42958ee98715ba2ec5fe221f4ca1e694d7c981b0ae0cd68e97baf6dce",
"scala_reflect": "6ba385b450a6311a15c918cf8688b9af9327c6104f0ecbd35933cfcd3095fe04",
},
"scala-2.12": {
"scala_compiler": "3023b07cc02f2b0217b2c04f8e636b396130b3a8544a8dfad498a19c3e57a863",
"scala_library": "f81d7144f0ce1b8123335b72ba39003c4be2870767aca15dd0888ba3dab65e98",
"scala_reflect": "ffa70d522fc9f9deec14358aa674e6dd75c9dfa39d4668ef15bb52f002ce99fa"
}
}
)
)
Но это дало мне ошибку config_setting cannot be in the WORKSPACE file
.
Итак, я попытался переместить код в файл Starlark.
В tools/build_rules/scala.bzl
:
config_setting(
name = "scala-2.11",
define_values = {
"scala": "2.11"
}
)
config_setting(
name = "scala-2.12",
define_values = {
"scala": "2.12"
}
)
def scala_version():
return select(
{
"scala-2.11": "2.11.12",
"scala-2.12": "2.12.6"
}
)
def scala_machinery():
return select(
{
"scala-2.11": {
"scala_compiler": "3e892546b72ab547cb77de4d840bcfd05c853e73390fed7370a8f19acb0735a0",
"scala_library": "0b3d6fd42958ee98715ba2ec5fe221f4ca1e694d7c981b0ae0cd68e97baf6dce",
"scala_reflect": "6ba385b450a6311a15c918cf8688b9af9327c6104f0ecbd35933cfcd3095fe04",
},
"scala-2.12": {
"scala_compiler": "3023b07cc02f2b0217b2c04f8e636b396130b3a8544a8dfad498a19c3e57a863",
"scala_library": "f81d7144f0ce1b8123335b72ba39003c4be2870767aca15dd0888ba3dab65e98",
"scala_reflect": "ffa70d522fc9f9deec14358aa674e6dd75c9dfa39d4668ef15bb52f002ce99fa"
}
}
)
И обратно в мой WORKSPACE
:
load("//tools/build_rules:scala.bzl", "scala_version", "scala_machinery")
scala_repositories(scala_version(), scala_machinery())
Но теперь я получаю эту ошибку:
tools/build_rules/scala.bzl:1:1: name 'config_setting' is not defined
Это сбивает меня с толку, потому что я думал, что встроен config_setting()
. Я не могу найти, откуда мне его загрузить.
Итак, мои вопросы:
- Как мне загрузить
config_setting()
в мой .bzl
файл? - Или, есть ли лучший способ управления из командной строки, какие аргументыполучить
scala_repositories()
? - Или это просто невозможно?
$ bazel version
Build label: 0.17.2-homebrew
Build target: bazel-out/darwin-opt/bin/src/main/java/com/google/devtools/build/lib/bazel/BazelServer_deploy.jar
Build time: Fri Sep 28 10:42:37 2018 (1538131357)
Build timestamp: 1538131357
Build timestamp as int: 1538131357