Перейти до вмісту

Довідник elide.pkl

Усі блоки й поля маніфесту проєкту Elide elide.pkl: метадані, вихідні файли, залежності, JVM, Kotlin, JavaScript, артефакти, тестування та робочі простори.

На цій сторінці

elide.pkl — маніфест проєкту: у ньому оголошуються збирання, залежності, тести й артефакти. Кожен файл починається так:

amends "elide:project.pkl"

elide: вказує на схему, вбудовану в запущений Elide, для цього та всіх інших модулів (elide:Jvm.pkl). Щоб закріпити версію схеми, розширюйте опубліковану URL-адресу: pkl.elide.dev/1.6.0/project.pkl.

Версія в розробці відстежує main до стабільного випуску. Випущені версії схеми незмінні.

Патч-випуски в межах лінії MAJOR.MINOR лише додають властивості. Мінорний випуск може вилучати, перейменовувати властивості, змінювати їхній тип і значення за замовчуванням.

Закріплена версіяРезультат
Старіша за запущений ElideВикористовується ця версія; властивість, вилучена пізніше, спричиняє помилку із зазначенням версії.
Новіша за запущений ElideДозволено; властивість, якої немає в запущеному Elide, спричиняє помилку із зазначенням потрібного оновлення.
Інша мажорна версіяВідхиляється.

elide project export виводить обчислений маніфест у JSON; elide build --inspect перелічує його завдання.

Метадані проєкту

ВластивістьПризначення
name, version, descriptionІдентифікація проєкту; version також входить в імена архівів застосунків.
entrypointФайл(и), які elide run використовує, якщо нічого не передано.
scriptsІменовані команди оболонки для elide run NAME.
sourcesНабори вихідних файлів; див. Вихідні файли.
dependenciesПакети Maven, npm і PyPI; див. Залежності.
jvm, kotlin, javascriptНалаштування мов і компіляторів.
nativeImageПриймається, але не застосовується; задавайте options кожного артефакту.
engineКонтексти для обслуговування запитів; див. Контексти рушія.
toolchainДопустимі версії Elide; див. Інструментарій.
devВідомості про вихідний код, MCP, сервер розробки; див. Розробка.
webНалаштування вебресурсів; див. Веб.
artifactsРезультати збирання; див. Артефакти.
testingЗвіти про тести; див. Тестування.
coverageПокриття; див. Тестування › Покриття.
workspaceПроєкти-учасники; див. Робочі простори.

build.flags містить значення -f/--flag; див. Прапорці збирання.

Контексти рушія

engine {
  topology = "prespawn"
  contexts { spawn = "auto"; reserve = 2; min = 1; max = 16 }
}
ВластивістьОписЗа замовчуванням
topology"prespawn", єдине значення."prespawn"
contexts.spawnКількість контекстів: додатне ціле число або "auto" (фізичні ядра мінус reserve, у межах обмежень).1
contexts.reserveЯдра, що віднімаються для "auto"; до процесорів не прив’язує.2
contexts.min, contexts.maxМежі для будь-якої кількості.1, немає
maxContextsЗастаріла фіксована кількість; не можна поєднувати з contexts.—

Кожен контекст один раз обчислює вхідний модуль із власними глобальними об’єктами, перш ніж сервер стане готовим. --contexts=N|auto у run, serve і dev перевизначає spawn. Більше одного контексту — лише в Linux.

Блок OpenTelemetry

opentelemetry {
  service { name = "checkout"; version = "1.4.2"; environment = "production" }
  resource { ["cloud.region"] = "us-east-1" }

  destinations {
    ["collector"] { endpoint = "http://localhost:4317"; protocol = "grpc" }
    ["datadog"] { provider = "datadog"; site = "us5" }
    ["sentry"] { provider = "sentry" }
  }

  traces { sampler = "parentbased_traceidratio"; ratio = 0.25 }
  metrics { interval = 30.s }
  logs { level = "info" }
  runtime { logs = "warn" }
}

Телеметрію вимкнено, доки не задано місце призначення: тут, у змінних OTEL_*/ELIDE_OTEL_* або в прапорцях --otel-*. Вони перевизначають цей блок, причому прапорці мають найвищий пріоритет; див. Змінні оточення середовища виконання. elide run, elide serve, elide test, elide build і elide install у проєкті читають цей блок; elide run file.js усередині проєкту читає його, якщо elide.pkl містить слово opentelemetry. Див. Конфігурація. Облікові дані тут не записуються: вкажіть змінну оточення, у якій вони зберігаються.

ВластивістьОписЗа замовчуванням
enabledfalse вимикає телеметрію незалежно від оточення.—
service.name, .version, .namespace, .environmentАтрибути ресурсу service.* і deployment.environment.name.unknown_service:elide
resourceДодаткові атрибути ресурсу.—
destinationsІменовані місця призначення телеметрії.немає
traces.enabled, .sampler, .ratio, .propagatorsСпани застосунку. Семплери — як у OTEL_TRACES_SAMPLER.увімк., parentbased_always_on, tracecontext + baggage
metrics.enabled, .interval, .temporalityМетрики застосунку.увімк., 60.s, cumulative
logs.enabled, .level, .consoleЖурнали застосунку; console експортує вивід console.*, Python logging тощо.увімк., info, увімк.
profiles.enabled, .frequencyПрофілі CPU гостьового коду (експериментально).вимк., 100 на секунду
runtime.traces, .metrics, .logsВласні спани й метрики Elide та поріг його журналів.увімк., увімк., warn
propagation.baggageW3C baggage у HTTP-сервері та клієнтах Elide; див. Baggage.вимк.
shutdownTimeoutКінцевий термін останнього експорту під час завершення.5.s

Кожне місце призначення:

ВластивістьОписЗа замовчуванням
providerotlp, sentry, datadog, posthog, honeycomb або grafana.otlp
endpointБазова URL-адреса; замінює хост провайдера. Для HTTP додається /v1/<signal>.http://localhost:4318 (4317 для gRPC)
protocolgrpc, http/protobuf або http/json.http/protobuf
headers, headerEnvЗаголовки в явному вигляді та заголовки із зазначених змінних.—
credentialЗмінна з ключем провайдера: DD_API_KEY, POSTHOG_PROJECT_TOKEN, HONEYCOMB_API_KEY, GRAFANA_CLOUD_OTLP_CREDENTIAL.як зазначено
dsnЗмінна з DSN Sentry.SENTRY_DSN
siteСайт Datadog: us1, us3, us5, eu, ap1, ap2, gov або домен.DD_SITE, потім us1
regionus/eu (PostHog, Honeycomb) або зона Grafana Cloud, наприклад prod-us-east-0.us
signalstraces, metrics, logs, profiles.те, що приймає провайдер
compression, timeoutСтиснення й кінцевий термін запиту.gzip, 10.s
perSignalendpoint, protocol, headers, headerEnv, compression, timeout для окремих сигналів.—
ПровайдерСигнали за замовчуваннямТакож приймаютьсяПротоколи
otlpтрасування, метрики, журналипрофіліусі
sentryтрасування, журнали—http/protobuf
datadogметрики (delta), журналитрасування (попередня версія agentless intake)http/protobuf; http/json, крім журналів
posthogжурналитрасуванняhttp/protobuf
honeycombтрасування, метрики, журнали—усі
grafanaтрасування, метрики, журнали—http/protobuf

Помилки надсилаються як записи журналу exception і події спанів, а також як метрика elide.errors, тож їх отримує кожен провайдер, що приймає журнали, трасування або метрики. Про використання див. Огляд OpenTelemetry, про кожного провайдера — Провайдери. Запит у провайдера сигналу чи протоколу, якого він не приймає, — помилка.

Baggage

HTTP-сервер і клієнти Elide передають traceparent і tracestate. W3C baggage вони передають, лише якщо ви ввімкнете відповідний напрямок, бо baggage від клієнта — це неперевірені вхідні дані:

opentelemetry {
  propagation {
    baggage {
      inbound = true
      outbound = true
      allow { "tenant"; "region" }
      spanAttributes { "tenant" }
    }
  }
}
ВластивістьОписЗа замовчуванням
inboundЗаголовки baggage запитів, що обслуговуються, стають baggage обробника.false
outboundВихідні запити fetch і HTTP-клієнта несуть поточний baggage, якщо запит сам не задає baggage.false
allowКлючі, дозволені в обох напрямках.усі ключі
spanAttributesВхідні ключі, що записуються в серверний спан як baggage.<key>; кожен має бути в allow.немає

Заголовок понад 8192 байти або 180 елементів чи з будь-яким некоректним елементом відкидається повністю. Baggage від клієнта потрапляє у вихідні запити, лише коли ввімкнено обидва напрямки. Код застосунку завжди може читати, задавати й надсилати baggage через API OpenTelemetry; OTEL_PROPAGATORS впливає лише на цей API.

Вихідні файли

sources {
  ["main"] = "lib/**/*.kt"
  ["integrationTest"] {
    type = "test"
    dependsOn { "main" }
    paths { "it/**/*.kt" }
    resources { "it/fixtures"; new { from = "it/config"; into = "META-INF" } }
  }
}
ВластивістьОписЯкщо порожньо або не задано
type"source", "test", "example" або "other".Визначається за назвою.
pathsGlob-шаблони або каталоги.src/<name>/<language>.
resourcesШляхи або корені new { from; into }.src/<name>/resources.
dependsOnНабори вихідних файлів, видимі цьому набору.Не задано: набори тестів і прикладів бачать main. Порожньо: нічого.

Див. Набори вихідних файлів.

Залежності

dependencies {
  maven {
    packages { "com.google.guava:guava:33.5.0-jre" }
    testPackages { "org.junit.jupiter:junit-jupiter:5.13.4" }
    substitutions { ["com.google.guava:guava"] = "libs/guava-patched.jar" }
  }
  npm { packages { "react@19.0.0" }; devPackages { "typescript@5.6.2" } }
  pypi { packages { "requests>=2" }; optionalPackages { ["dev"] { "pytest>=8" } } }
  spring { version = "4.0.0"; starter { "web" }; testStarter { "test" } }
}
БлокВластивості
mavenpackages, devPackages, modules, compileOnly, runtimeOnly, processors, testPackages, kotlinPlugins, exclusions, substitutions, repositories, enableDefaultRepositories, localRepository
npmpackages, devPackages
pypipackages, optionalPackages (іменовані групи); elide install їх не встановлює.
springversion, starter, testStarter; розгортається в maven.
ЗначенняФорма
Запис Maven"group:artifact:version[:classifier]", MavenPackageSpec (group, name, version, classifier або coordinate), шлях до локального JAR або посилання на проєкт.
РепозиторійURL-адреса або опис з url, name, description, credentials (username, password, ntlmDomain, ntlmWorkstation).
Ключ substitutionsgroup:artifact (будь-яка версія) або group:artifact:version; значення — шлях до файлу.

Підстановка зберігає транзитивні залежності координати й ставить файл замість неї в кожен classpath. Шляхи розв’язуються відносно маніфесту, що їх оголошує; учасники успадковують підстановки кореня. Завдання, що генерує файл, має виконуватися раніше. Групи й репозиторії: Залежності.

JVM

jvm {
  main = "example.Main"
  target = 25
  flags { "--add-opens=java.base/java.lang=ALL-UNNAMED" }
  defs { ["app.env"] = "dev" }
  java { release = 25; compiler { flags { "-Xlint:all" } } }
}
ВластивістьОписЗа замовчуванням
mainКлас точки входу для elide run, JAR, застосунків і нативних образів.—
targetЦільовий байт-код: 8 … 29, 1.8, "latest", "stable" або "auto"."auto" (21)
javaHomeКаталог Java для зовнішньої компіляції та окремих процесів JVM.власний Elide
preferBaliЗовнішні запуски JVM викликають bali з PATH замість java, а без нього виводять попередження й використовують java.false
features.testingЗалежності JUnit у наборах тестів.true
features.automodulesАвтоматичні модулі для JAR без дескриптора.true
features.graalvmAPI SDK org.graalvm у classpath компіляції.false
java.source, java.releaseРівні вихідного коду та --release; див. Компілятор Java."auto"
java.compiler.mode"embedded" або "external"."embedded"
java.compiler.flagsДодаткові прапорці javac.немає
java.sourceSetsrelease і flags для окремих наборів вихідних файлів; див. Компілятор Java.немає
flagsПрапорці JVM для elide run, тестової JVM і стартових скриптів.немає
defsСистемні властивості (-D), застосовуються скрізь, де й flags.немає
debugКомпілювати з -g.true

Kotlin

kotlin {
  apiLevel = "auto"
  languageLevel = "auto"
  compilerOptions { allWarningsAsErrors = true; optIn { "kotlin.time.ExperimentalTime" } }
  features { serialization = true; metro = false }
  toolchain = "embedded"
  plugins { ["org.jetbrains.kotlinx.serialization"] { ["mode"] = "json" } }
}
ВластивістьОпис
apiLevel, languageLevel"auto", "latest", "stable" або "1.9" … "2.5".
compilerOptionsoptIn, progressiveMode, extraWarnings, allWarningsAsErrors, suppressWarnings, verbose, freeCompilerArgs, apiVersion, languageVersion, includeRuntime, noStdlib, javaParameters, jvmTarget, noJdk, jvmTargetValidationMode, incremental
featurestesting, kotlinx, defaultPlugins, serialization, coroutines, atomicfu, powerAssert, metro, reflection
toolchain"embedded", new Kotlin.ManagedKotlinToolchain { version } або new Kotlin.CustomKotlinToolchain { path }.
pluginsПараметри для кожного id плагіна компілятора, передаються як -P plugin:<id>:<key>=<value>.

Значення за замовчуванням: Компілятор Kotlin.

JavaScript

ВластивістьОписЗа замовчуванням
javascript.ecmaОголошена редакція ECMAScript: рік 2015 … 2025, "stable" або "latest". Її показує elide project info; вона не змінює ні синтаксис, що виконується, ні спосіб збирання коду (Мова JavaScript)."stable"

Інструментарій

toolchain { engines { ["elide"] = ">=1.6.0" } }
ВластивістьОпис
engines["elide"]Версія чи діапазон semver або new { version = "…" }; запущений Elide поза цим діапазоном не проходить перевірку.
engines[<other>]Приймається, але не перевіряється.

Розробка

dev {
  source { platform = "github"; project = "example/app" }
  mcp {
    registerElide = true
    advice = true
    resources { new { path = "docs/ARCHITECTURE.md"; name = "architecture" } }
  }
}
ВластивістьОписЗа замовчуванням
source.platform, source.project, source.subpathХостинг вихідного коду: "github", "gitlab", "bitbucket", "git" або інша назва.—
mcp.registerElideЗареєструвати Elide як інструмент MCP.true
mcp.adviceНадавати elide project advice як ресурс MCP.true
mcp.resourcesДодаткові ресурси MCP: path, name, description, mimeType (визначається, якщо не вказано).немає
server.host, server.portНе використовуються в elide dev, який приймає --host/--port (за замовчуванням 127.0.0.1:3000)."0.0.0.0", 8080

Веб

ВластивістьОписЗа замовчуванням
web.css.minifyМініфікувати зібраний CSS.true
web.css.targetsЦільові браузери: new { browser = "chrome"; version = "120" }.немає
web.minifyHtmlМініфікувати відрендерений HTML.true
web.browsersЦільові браузери для всіх результатів; для CSS його перевизначає css.targets.немає

Див. Веб-інструментарій.

Артефакти

import "elide:Jvm.pkl" as Jvm

artifacts {
  ["app"] = new Jvm.Jar {
    name = "app.jar"
    options { entrypoint = "example.Main" }
    sources { "main" }  // optional; empty packages every non-test source set
  }
}

Ключ задає назву завдання збирання. Результати потрапляють у .dev/artifacts/<kind>/.

ТипМодульПоля
Jar, SourceJar, JavadocJar, JvmApplicationelide:Jvm.pklЗбирання JAR
NativeImageelide:NativeImage.pklNative Image
WebImageelide:NativeImage.pklWebImage
ContainerImageelide:Container.pklJVM-контейнери
StaticSiteelide:Web.pklСтатичні сайти
Спільне полеОпис
dependsOnНазви артефактів, які треба зібрати раніше.
name (JAR)І "app", і "app.jar" дають app.jar; SourceJar дає app-sources.jar.

WebImage

WebImage приймає поля NativeImage from, name, entrypoint, moduleName, dependsOn і options, не має type і додає:

ВластивістьЗначенняЗа замовчуванням
backend"wasm-gc" (GC хоста) або "wasm-lm" (лінійна пам’ять)."wasm-gc"
runtime"generic", "browser" або "node"."generic"
autoRunЗапускати програму, коли завантажувач завантажено.true
sourceMapСтворювати source map JavaScript.false

entrypoint (або jvm.main) обов’язковий навіть за autoRun = false. Не передавайте сирі прапорці для цих чотирьох налаштувань. Посібник: WebImage; артефакти на прапорцях: міграція.

Публікація

publishing {
  maven {
    groupId = "dev.example"
    artifactId = "example"                 // default: the project name
    localRepository = "~/.m2/repository"   // the default
    artifacts { "lib"; "lib-sources" }      // default: every Jar, SourceJar and JavadocJar
    pom {
      name = "Example"
      description = "An example library."  // default: the project description
      url = "https://example.dev"
      licenses { new { name = "Apache-2.0"; url = "https://www.apache.org/licenses/LICENSE-2.0" } }
      developers { new { id = "jdoe"; name = "J. Doe" } }
      scm { url = "https://github.com/example/example" }
    }
    repositories {
      ["internal"] = "https://repo.example.dev/releases"  // or new Jvm.MavenRepositorySpec { url = … }
      ["central"] = new Publishing.CentralPortal {}       // Maven Central; import "elide:Publishing.pkl" as Publishing
    }
    signing { gpg { keyName = "0123ABCD" } }  // optional; omit keyName for gpg's default key
  }
}

elide publish збирає вибрані JAR і встановлює їх разом із POM у локальний репозиторій Maven. Версія береться з version проєкту. Публікації потрібні groupId, version і рівно один Jar. SourceJar публікується зі своїм classifier (за замовчуванням sources), JavadocJar — з javadoc. Відносний localRepository розв’язується відносно маніфесту, у якому його оголошено.

МаніфестОпублікований POM
packages, modulesЗалежності compile
runtimeOnlyЗалежності runtime
compileOnly, devPackages, processors, kotlinPlugins, testPackagesНе включаються
exclusions без версії<exclusion> у кожній залежності
Сусідній проєктВласні координати публікації цього проєкту
Сусідній проєкт у Jar.fromЙого packages, modules і runtimeOnly, якщо їх ще не перелічено
Шлях до локального JARПомилка: споживачі не можуть його розв’язати

POM також перелічує як залежності compile бібліотеки, які Elide без оголошення додає в classpath проєкту Kotlin, бо вони потрібні споживачам під час виконання: kotlin-stdlib і kotlin-reflect версії Kotlin проєкту, а також бібліотеки середовища виконання, які вмикає kotlin.features (kotlinx-coroutines-core, kotlinx-serialization, середовище виконання Metro). Вони потрапляють в опублікований POM, хоча elide.pkl їх не називає. Вимкніть таку бібліотеку там, звідки вона береться (kotlin.features або kotlin.compilerOptions.noStdlib), або оголосіть її самостійно, щоб закріпити іншу версію. jvm.features.graalvm додає GraalVM SDK з областю runtime.

elide publish --to <name> натомість публікує в репозиторій з repositories, з контрольними сумами .md5, .sha1, .sha256 і .sha512 для кожного файлу. Облікові дані беруться з ELIDE_MAVEN_<NAME>_USERNAME і ELIDE_MAVEN_<NAME>_PASSWORD, де <NAME> — назва репозиторію у верхньому регістрі, у якій кожен символ, крім літер і цифр, замінено на _ (internal → ELIDE_MAVEN_INTERNAL_USERNAME, my-repo → ELIDE_MAVEN_MY_REPO_…), а якщо їх немає — з credentials репозиторію. Дві назви, що дають ті самі змінні (my-repo і my_repo), відхиляються. Репозиторії із простим http://, крім localhost, відхиляються без --allow-http-repositories.

Якщо задано signing, віддалена публікація підписує кожен файл програмою gpg (<file>.asc); signing {} підписує ключем gpg за замовчуванням, а signing { gpg { keyName = "…" } } вибирає ключ. Локальна публікація підписує лише з --sign, а --no-sign вимикає підпис. Парольну фразу запитує gpg-agent. Для CI задайте ELIDE_GPG_PASSPHRASE, і Elide передасть її gpg через loopback pinentry. Сам ключ Elide ніколи не читає.

Репозиторій CentralPortal публікує в Maven Central через Central Publisher Portal. Створіть у Portal токен користувача й передайте його як ELIDE_MAVEN_<NAME>_USERNAME і ELIDE_MAVEN_<NAME>_PASSWORD. Усі проєкти запуску потрапляють в один підписаний пакет із контрольними сумами та одне розгортання, яке Portal перевіряє й випускає цілком. Elide чекає, доки Portal його перевірить, і завершується з помилками Portal, якщо перевірку не пройдено. --no-wait натомість повертає керування одразу після завантаження.

Властивість CentralPortalОписЗа замовчуванням
publishingTypeUSER_MANAGED: перевірене розгортання ви випускаєте в Portal самі. AUTOMATIC: випуск одразу після перевірки.USER_MANAGED
urlPortal, у який виконується завантаження.https://central.sonatype.com

Перед збиранням Elide перевіряє вимоги Central і одразу повідомляє про все, чого бракує: у pom — name, description, url, licenses, developers і scm.url; артефакти SourceJar і JavadocJar; підпис (тому --no-sign відхиляється); версія, що не є -SNAPSHOT.

У робочому просторі учасники успадковують блок publishing кореня, крім artifactId і artifacts, а власні налаштування учасника мають пріоритет для кожного поля. Репозиторії успадковуються за назвою. Проєкт, що не збирає JAR, нічого успадкованого не публікує.

Щоб опублікувати лише частину проєктів робочого простору, перелічіть їх (elide publish core util), а не змінюйте їхні блоки publishing, або передайте --skip-existing, щоб пропустити всі версії, які вже є в цільовому репозиторії; див. elide publish.

Тестування

import "elide:Testing.pkl" as Testing

testing { reports { Testing.xmlReport() } }
ВластивістьОпис
testing.reportsФормати звітів для всіх засобів запуску тестів, записуються в .dev/reports/tests/<language>/<source-set>/; те саме, що --reporter=junit.

Покриття

import "elide:Coverage.pkl" as Coverage

coverage {
  enabled = true
  scope = "tests"
  jvm {
    excludes { "org.example.generated.*" }
    reports { Coverage.xmlReport(); Coverage.htmlReport() }
  }
  js { paths { "src" } }
}
ВластивістьОписЗа замовчуванням
coverage.enabledЗбирати покриття без --coverage.false
coverage.scopeЗавдання, що збирають покриття: "tests", "runs" або "all". --coverage завжди покриває завдання, якому його передано."tests"
coverage.jvm.reportsФормати звітів JVM: Coverage.htmlReport(), xmlReport(), csvReport(), записуються в .dev/reports/coverage/jvm/<task>/.немає
coverage.jvm.excludesШаблони імен класів (*, ?), які не інструментуються, наприклад згенерований код.немає
coverage.js.pathsКорені вихідних файлів JavaScript і TypeScript для звіту у форматі LCOV у .dev/reports/coverage/js/lcov.info. Порожнє значення — звіт за всім проєктом.немає

Див. Тестування › Покриття.

Робочі простори

workspace { members { "core"; "app" } }

Кожен учасник — це каталог із власним elide.pkl; учасники не можуть мати своїх учасників. elide init --template workspace створює корінь із бібліотекою core і застосунком app, що від неї залежить.

ПоведінкаПравило
Область збиранняЗ кореня elide build/elide test охоплюють усі проєкти; з учасника — лише його.
Завдання інших проєктівelide build core:compile-kotlin-main або elide build core для його завдань за замовчуванням.
Спільний станРозв’язані залежності й стан збирання зберігаються в .dev кореня; результати лишаються в .dev кожного проєкту.
Закріплення версійУчасник може не вказувати версію Maven і брати її з кореня; конфліктна версія — помилка.
// core/elide.pkl
import "elide:Jvm.pkl" as Jvm

dependencies {
  maven {
    packages { "com.google.guava:guava" }  // version from the root
  }
}

artifacts {
  ["jar"] = new Jvm.Jar { name = "core" }
}
// app/elide.pkl
local core = project("core")

dependencies { maven { packages { core } } }
ПосиланняОпис
project("core")Артефакт Jvm.Jar проєкту та його classpath компіляції; збирається за потреби. Самі лише вихідні файли JVM не враховуються.
project("core").artifact("fat")Вибрати один JAR, якщо проєкт оголошує кілька.
project("core").friend()Додатково бачити оголошення Kotlin internal з core, але не з його залежностей. Лише в packages, modules, compileOnly, testPackages.
new Jvm.Jar { from { core } }Розпакувати JAR core у цей JAR, попередньо зібравши його; залежність не потрібна.
module.project("core")Використовуйте на місці, усередині тіла об’єкта; простий project(…) там не розв’язується.
new Artifacts.ProjectArtifact { project = "core"; artifact = "fat" }Явна форма; import "elide:Artifacts.pkl" as Artifacts.

Посилання на проєкт без JAR або friend() не на своєму місці спричиняє помилку під час конфігурації збирання.

Чи була ця сторінка корисною?