Erlang Hello World использует Bazel в качестве системы сборки

Я хочу создать пример приветствия мира Erlang, используя rules_erlang в Ubuntu 22.04.

Моя установка выглядит так:

СТРОЙ.базел

load("@rules_erlang//:erlang_app.bzl", "erlang_app", "test_erlang_app")
load("@rules_erlang//:xref.bzl", "xref")
load("@rules_erlang//:dialyze.bzl", "dialyze", "plt")
load("@rules_erlang//:ct.bzl", "ct_suite", "assert_suites")

APP_NAME = "hello_world"
APP_VERSION = "0.1.0"

erlang_app(
    app_name = APP_NAME,
    app_version = APP_VERSION,
)

источник/hello_world.erl

-module(hello_world).
-compile(export_all).


hello() ->
    io:format("hello world~n").

РАБОЧАЯ ОБЛАСТЬ.bazel

load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive")

http_archive(
    name = "bazel_skylib",
    sha256 = "af87959afe497dc8dfd4c6cb66e1279cb98ccc84284619ebfec27d9c09a903de",
    urls = [
        "https://mirror.bazel.build/github.com/bazelbuild/bazel-skylib/releases/download/1.2.0/bazel-skylib-1.2.0.tar.gz",
        "https://github.com/bazelbuild/bazel-skylib/releases/download/1.2.0/bazel-skylib-1.2.0.tar.gz",
    ],
)

load("@bazel_skylib//:workspace.bzl", "bazel_skylib_workspace")

bazel_skylib_workspace()

http_archive(
    name = "rules_erlang",
    sha256 = "5e59800ecc786d5375951028c959c6e6275c94eff2a52f5d53ccb1ad8b2ea20a",
    strip_prefix = "rules_erlang-3.8.4",
    urls = ["https://github.com/rabbitmq/rules_erlang/archive/refs/tags/3.8.4.zip"],
)

load(
    "@rules_erlang//:rules_erlang.bzl",
    "erlang_config",
    "rules_erlang_dependencies",
)

erlang_config()

rules_erlang_dependencies()

load("@erlang_config//:defaults.bzl", "register_defaults")

register_defaults()

Код также можно найти здесь.

Когда я выполняю bazel build //... я получаю

ОШИБКА: /home/vertexwahn/.cache/bazel/_bazel_vertexwahn/b5f945f94177a8ffa6ac0f7108dfc1cd/external/erlang_config/external/BUILD.bazel:12:16: Ошибка проверки otp в /usr: (Выход 1): ошибка bash: ошибка выполнения команда /bin/bash -c ... (оставшийся 1 аргумент пропущен)

Используйте --sandbox_debug для просмотра подробных сообщений из песочницы и сохранить корень сборки песочницы для отладки несоответствия версии Erlang (Ожидается НЕИЗВЕСТНО, найдено 24.2.1)

Приветствуются любые подсказки, чтобы заставить эту работу работать!

Было бы полезно, если бы вы могли поделиться своим кодом в репо или pastebin.

2240 08.12.2022 11:48
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
2
2
93
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

bazel build //... --sandbox_debug

дал мне

compile: warnings being treated as errors
hello_world.erl:2:2: export_all flag enabled - all functions will be exported

С -export([hello/0]). вместо -compile(export_all). это работает

-module(hello_world).
-export([hello/0]).


hello() ->
    io:format("hello world~n").
❯ bazel build //...
INFO: Analyzed 3 targets (0 packages loaded, 0 targets configured).
INFO: Found 3 targets...
INFO: Elapsed time: 0,326s, Critical Path: 0,25s
INFO: 2 processes: 1 internal, 1 darwin-sandbox.
INFO: Build completed successfully, 2 total actions

Один все еще нерешенный вопрос: как я могу теперь запустить программу hello_world? bazel run //:erlang_app не работает - есть идеи?

Vertexwahn 16.12.2022 00:51
Ответ принят как подходящий

Чтобы запустить его, вы можете объявить правило shell в вашем BUILD.bazel, например:

load("@rules_erlang//:shell.bzl", "shell")
shell(
    name = "repl",
    deps = [":erlang_app"],
    extra_erl_args = ["-eval", "'hello_world:hello()'"],
)

и тогда вы могли бы базель run :repl.

Или вы можете использовать правило escript, если вы измените hello_world.erl так, чтобы оно экспортировало main/1 вместо hello:

load("@rules_erlang//:escript.bzl", "escript_archive")
escript_archive(
    name = "hello_world",
    app = ":erlang_app",
)

hello_world.erl:

-module(hello_world).
-export([main/1]).


main(_) ->
    io:format("hello world~n").

и беги с bazel run :hello_world

Другие вопросы по теме