elide.pkl ist das Projektmanifest: Es deklariert Builds, Abhängigkeiten, Tests und Artefakte. Jede Datei beginnt mit:
amends "elide:project.pkl"elide: verweist auf das Schema, das mit dem laufenden Elide ausgeliefert wird, für dieses und jedes andere Modul
(elide:Jvm.pkl). Um eine Schemaversion festzulegen, erweitern Sie die veröffentlichte URL:
pkl.elide.dev/1.6.0/project.pkl.
Die Version in Entwicklung folgt main bis zu ihrem stabilen Release. Veröffentlichte Schemaversionen sind
unveränderlich.
Patch-Releases innerhalb einer MAJOR.MINOR-Linie fügen nur Eigenschaften hinzu. Ein Minor-Release kann Eigenschaften
entfernen, umbenennen oder ihren Typ ändern und Standardwerte ändern.
| Festgelegte Version | Ergebnis |
|---|---|
| Älter als das laufende Elide | Diese Version wird verwendet; eine seither entfernte Eigenschaft schlägt fehl und nennt die Version. |
| Neuer als das laufende Elide | Erlaubt; eine Eigenschaft, die das laufende Elide nicht kennt, schlägt fehl und nennt das nötige Upgrade. |
| Andere Major-Version | Abgelehnt. |
elide project export gibt das ausgewertete Manifest als JSON aus; elide build --inspect listet seine Tasks auf.
Projektmetadaten
| Eigenschaft | Zweck |
|---|---|
name, version, description | Projektidentität; version benennt auch Anwendungsarchive. |
entrypoint | Datei(en), die elide run ohne Argument verwendet. |
scripts | Benannte Shell-Befehle für elide run NAME. |
sources | Source-Sets; siehe Quellen. |
dependencies | Maven-, npm- und PyPI-Pakete; siehe Abhängigkeiten. |
jvm, kotlin, javascript | Sprach- und Compiler-Einstellungen. |
nativeImage | Akzeptiert, aber nicht angewendet; setzen Sie die options jedes Artefakts. |
engine | Kontexte für Server; siehe Engine-Kontexte. |
toolchain | Akzeptierte Elide-Versionen; siehe Werkzeugkette. |
dev | Quellinformationen, MCP, Entwicklungsserver; siehe Dev. |
web | Einstellungen für Web-Assets; siehe Web. |
artifacts | Build-Ausgaben; siehe Artefakte. |
testing | Testberichte; siehe Tests. |
coverage | Abdeckung; siehe Tests › Abdeckung. |
workspace | Mitgliedsprojekte; siehe Workspaces. |
build.flags enthält die Werte von -f/--flag; siehe Build-Flags.
Engine-Kontexte
engine {
topology = "prespawn"
contexts { spawn = "auto"; reserve = 2; min = 1; max = 16 }
}| Eigenschaft | Bedeutung | Standard |
|---|---|---|
topology | "prespawn", der einzige Wert. | "prespawn" |
contexts.spawn | Anzahl der Kontexte: eine positive Ganzzahl oder "auto" (physische Kerne minus reserve, begrenzt). | 1 |
contexts.reserve | Für "auto" abgezogene Kerne; bindet keine CPUs. | 2 |
contexts.min, contexts.max | Grenzen für jede Anzahl. | 1, keine |
maxContexts | Veraltete feste Anzahl; nicht mit contexts kombinierbar. | — |
Jeder Kontext wertet das Einstiegsmodul einmal mit eigenen Globals aus, bevor der Server bereit ist.
--contexts=N|auto bei run, serve und dev überschreibt spawn. Mehr als ein Kontext erfordert Linux.
OpenTelemetry-Block
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" }
}Telemetrie ist aus, bis ein Ziel hier, in OTEL_*/ELIDE_OTEL_*-Variablen oder in --otel-*-Flags existiert.
Diese überschreiben diesen Block, Flags zuerst; siehe
Laufzeit-Umgebungsvariablen.
elide run, elide serve, elide test, elide build und elide install lesen diesen Block in einem Projekt;
elide run file.js liest ihn innerhalb eines Projekts, wenn elide.pkl das Wort opentelemetry enthält. Siehe
Konfiguration. Zugangsdaten stehen nie hier: Nennen Sie die Umgebungsvariable, die sie
enthält.
| Eigenschaft | Bedeutung | Standard |
|---|---|---|
enabled | false schaltet Telemetrie aus, unabhängig von der Umgebung. | — |
service.name, .version, .namespace, .environment | Ressourcenattribute service.* und deployment.. | unknown_service:elide |
resource | Zusätzliche Ressourcenattribute. | — |
destinations | Benannte Ziele für die Telemetrie. | keine |
traces.enabled, .sampler, .ratio, .propagators | Spans der Anwendung. Sampler wie bei OTEL_TRACES_SAMPLER. | an, parentbased_always_on, tracecontext + baggage |
metrics.enabled, .interval, .temporality | Metriken der Anwendung. | an, 60.s, cumulative |
logs.enabled, .level, .console | Logs der Anwendung; console exportiert console.*, Python-logging und ähnliche Ausgaben. | an, info, an |
profiles.enabled, .frequency | CPU-Profile des Gastcodes (experimentell). | aus, 100 pro Sekunde |
runtime.traces, .metrics, .logs | Elides eigene Spans, Metriken und Log-Schwelle. | an, an, warn |
propagation.baggage | W3C-Baggage im HTTP-Server und in den HTTP-Clients von Elide; siehe Baggage. | aus |
shutdownTimeout | Frist für den letzten Export beim Beenden. | 5.s |
Jedes Ziel:
| Eigenschaft | Bedeutung | Standard |
|---|---|---|
provider | otlp, sentry, datadog, posthog, honeycomb oder grafana. | otlp |
endpoint | Basis-URL; ersetzt den Host eines Anbieters. Bei HTTP wird /v1/<signal> angehängt. | http://localhost:4318 (4317 für gRPC) |
protocol | grpc, http/protobuf oder http/json. | http/protobuf |
headers, headerEnv | Feste Header und Header aus benannten Variablen. | — |
credential | Variable mit dem Schlüssel des Anbieters: DD_API_KEY, POSTHOG_PROJECT_TOKEN, HONEYCOMB_API_KEY, GRAFANA_. | wie aufgeführt |
dsn | Variable mit einem Sentry-DSN. | SENTRY_DSN |
site | Datadog-Site: us1, us3, us5, eu, ap1, ap2, gov oder eine Domain. | DD_SITE, dann us1 |
region | us/eu (PostHog, Honeycomb) oder eine Grafana-Cloud-Zone wie prod-us-east-0. | us |
signals | traces, metrics, logs, profiles. | was der Anbieter akzeptiert |
compression, timeout | Komprimierung und Frist der Anfragen. | gzip, 10.s |
perSignal | endpoint, protocol, headers, headerEnv, compression, timeout pro Signal. | — |
| Anbieter | Standardmäßig gesendete Signale | Ebenfalls akzeptiert | Protokolle |
|---|---|---|---|
otlp | Traces, Metriken, Logs | Profile | alle |
sentry | Traces, Logs | — | http/protobuf |
datadog | Metriken (Delta), Logs | Traces (Agentless-Intake-Vorschau) | http/protobuf; http/json außer für Logs |
posthog | Logs | Traces | http/protobuf |
honeycomb | Traces, Metriken, Logs | — | alle |
grafana | Traces, Metriken, Logs | — | http/protobuf |
Fehler werden als exception-Log-Einträge und Span-Events sowie als Metrik elide.errors gesendet, sodass jeder
Anbieter, der Logs, Traces oder Metriken akzeptiert, sie erhält. Siehe OpenTelemetry-Überblick zur
Verwendung und Anbieter zu den einzelnen Anbietern. Ein Signal oder Protokoll von einem
Anbieter anzufordern, der es nicht akzeptiert, ist ein Fehler.
Baggage
Der HTTP-Server und die HTTP-Clients von Elide propagieren traceparent und tracestate. W3C-baggage geben sie nur
weiter, wenn Sie eine Richtung einschalten, denn Baggage von einem Client ist nicht vertrauenswürdige Eingabe:
opentelemetry {
propagation {
baggage {
inbound = true
outbound = true
allow { "tenant"; "region" }
spanAttributes { "tenant" }
}
}
}| Eigenschaft | Bedeutung | Standard |
|---|---|---|
inbound | Die baggage-Header eingehender Anfragen werden zur Baggage des Handlers. | false |
outbound | Ausgehende fetch- und HTTP-Client-Anfragen tragen die aktuelle Baggage, sofern die Anfrage baggage nicht selbst setzt. | false |
allow | In beiden Richtungen erlaubte Schlüssel. | alle Schlüssel |
spanAttributes | Eingehende Schlüssel, die als baggage.<key> am Server-Span erfasst werden; jeder muss in allow stehen. | keine |
Ein Header mit mehr als 8.192 Bytes oder 180 Einträgen oder mit einem fehlerhaften Eintrag wird ganz verworfen. Von
einem Client empfangene Baggage erreicht ausgehende Anfragen nur, wenn beide Richtungen eingeschaltet sind.
Anwendungscode kann Baggage über die OpenTelemetry-API immer lesen, setzen und senden; OTEL_PROPAGATORS wirkt nur auf
diese API.
Quellen
sources {
["main"] = "lib/**/*.kt"
["integrationTest"] {
type = "test"
dependsOn { "main" }
paths { "it/**/*.kt" }
resources { "it/fixtures"; new { from = "it/config"; into = "META-INF" } }
}
}| Eigenschaft | Bedeutung | Leer oder fehlend |
|---|---|---|
type | "source", "test", "example" oder "other". | Aus dem Namen abgeleitet. |
paths | Globs oder Verzeichnisse. | src/<name>/<language>. |
resources | Pfade oder Wurzeln der Form new { from; into }. | src/<name>/resources. |
dependsOn | Für dieses Set sichtbare Source-Sets. | Fehlend: Test- und Beispiel-Sets sehen main. Leer: nichts. |
Siehe Source-Sets.
Abhängigkeiten
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" } }
}| Block | Eigenschaften |
|---|---|
maven | packages, devPackages, modules, compileOnly, runtimeOnly, processors, testPackages, kotlinPlugins, exclusions, substitutions, repositories, enableDefaultRepositories, localRepository |
npm | packages, devPackages |
pypi | packages, optionalPackages (benannte Gruppen); elide install installiert sie nicht. |
spring | version, starter, testStarter; wird zu maven expandiert. |
| Wert | Form |
|---|---|
| Maven-Eintrag | "group:artifact:version[:classifier]", eine MavenPackageSpec (group, name, version, classifier oder coordinate), ein lokaler JAR-Pfad oder eine Projektreferenz. |
| Repository | Eine URL oder eine Spezifikation mit url, name, description, credentials (username, password, ntlmDomain, ntlmWorkstation). |
Schlüssel in substitutions | group:artifact (jede Version) oder group:artifact:version; der Wert ist ein Dateipfad. |
Eine Ersetzung behält die transitiven Abhängigkeiten der Koordinate und setzt die Datei an ihrer Stelle auf jeden Classpath. Pfade werden relativ zum deklarierenden Manifest aufgelöst; Mitglieder erben die der Wurzel. Ordnen Sie den Task, der die Datei erzeugt, davor an. Buckets und Repositorys: Abhängigkeiten.
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" } } }
}| Eigenschaft | Bedeutung | Standard |
|---|---|---|
main | Einstiegsklasse für elide run, JARs, Anwendungen und Native Images. | — |
target | Bytecode-Ziel: 8 … 29, 1.8, "latest", "stable" oder "auto". | "auto" (21) |
javaHome | Java-Home für externe Kompilierungen und abgezweigte JVMs. | Elides eigenes |
preferBali | Externe JVM-Läufe starten bali aus dem PATH statt java, oder warnen und verwenden java. | false |
features.testing | JUnit-Abhängigkeiten in Test-Sets. | true |
features.automodules | Automatische Module für JARs ohne Deskriptor. | true |
features.graalvm | org.graalvm-SDK-APIs auf dem Compile-Classpath. | false |
java.source, java.release | Quell- und --release-Level; siehe Java-Compiler. | "auto" |
java.compiler.mode | "embedded" oder "external". | "embedded" |
java.compiler.flags | Zusätzliche javac-Flags. | keine |
java.sourceSets | release und flags pro Source-Set; siehe Java-Compiler. | keine |
flags | JVM-Flags für elide run, die Test-JVM und Startskripte. | keine |
defs | Systemeigenschaften (-D), überall dort angewendet, wo flags gelten. | keine |
debug | Mit -g kompilieren. | 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" } }
}| Eigenschaft | Bedeutung |
|---|---|
apiLevel, languageLevel | "auto", "latest", "stable" oder "1.9" … "2.5". |
compilerOptions | optIn, progressiveMode, extraWarnings, allWarningsAsErrors, suppressWarnings, verbose, freeCompilerArgs, apiVersion, languageVersion, includeRuntime, noStdlib, javaParameters, jvmTarget, noJdk, jvmTargetValidationMode, incremental |
features | testing, kotlinx, defaultPlugins, serialization, coroutines, atomicfu, powerAssert, metro, reflection |
toolchain | "embedded", new Kotlin. oder new Kotlin.. |
plugins | Optionen pro Compiler-Plugin-ID, übergeben als -P plugin:<id>:<key>=. |
Standardwerte: Kotlin-Compiler.
JavaScript
| Eigenschaft | Bedeutung | Standard |
|---|---|---|
javascript.ecma | Deklarierte ECMAScript-Edition: ein Jahr 2015 … 2025, "stable" oder "latest". elide project info zeigt sie an; sie ändert weder, welche Syntax läuft, noch, wie Code gebaut wird (JavaScript-Sprache). | "stable" |
Werkzeugkette
toolchain { engines { ["elide"] = ">=1.6.0" } }| Eigenschaft | Bedeutung |
|---|---|
engines["elide"] | Version oder Semver-Bereich, oder new { version = "…" }; ein laufendes Elide außerhalb davon besteht die Validierung nicht. |
engines[<other>] | Akzeptiert, nicht erzwungen. |
Dev
dev {
source { platform = "github"; project = "example/app" }
mcp {
registerElide = true
advice = true
resources { new { path = "docs/ARCHITECTURE.md"; name = "architecture" } }
}
}| Eigenschaft | Bedeutung | Standard |
|---|---|---|
source.platform, source.project, source.subpath | Quell-Host: "github", "gitlab", "bitbucket", "git" oder ein anderer Name. | — |
mcp.registerElide | Elide als MCP-Werkzeug registrieren. | true |
mcp.advice | elide project advice als MCP-Ressource bereitstellen. | true |
mcp.resources | Zusätzliche MCP-Ressourcen: path, name, description, mimeType (ohne Angabe erkannt). | keine |
server.host, server.port | Von elide dev nicht verwendet; es nimmt --host/--port (Standard 127.0.0.1:3000). | "0.0.0.0", 8080 |
Web
| Eigenschaft | Bedeutung | Standard |
|---|---|---|
web.css.minify | Gebautes CSS minifizieren. | true |
web.css.targets | Browser-Ziele: new { browser = "chrome"; version = "120" }. | keine |
web.minifyHtml | Gerendertes HTML minifizieren. | true |
web.browsers | Browser-Ziele für alle Ausgaben; css.targets überschreibt sie für CSS. | keine |
Siehe Web-Werkzeugkette.
Artefakte
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
}
}Der Schlüssel benennt den Build-Task. Ausgaben landen unter .dev/artifacts/<kind>/.
| Typ | Modul | Felder |
|---|---|---|
Jar, SourceJar, JavadocJar, JvmApplication | elide:Jvm.pkl | JAR-Erstellung |
NativeImage | elide:NativeImage.pkl | Native Image |
WebImage | elide:NativeImage.pkl | WebImage |
ContainerImage | elide:Container.pkl | JVM-Container |
StaticSite | elide:Web.pkl | Statische Websites |
| Gemeinsames Feld | Bedeutung |
|---|---|
dependsOn | Namen der Artefakte, die zuerst gebaut werden. |
name (JARs) | "app" und "app.jar" ergeben beide app.jar; ein SourceJar ergibt app-sources.jar. |
WebImage
WebImage übernimmt die NativeImage-Felder from, name,
entrypoint, moduleName, dependsOn und options, hat kein type und ergänzt:
| Eigenschaft | Werte | Standard |
|---|---|---|
backend | "wasm-gc" (GC des Hosts) oder "wasm-lm" (linearer Speicher). | "wasm-gc" |
runtime | "generic", "browser" oder "node". | "generic" |
autoRun | Das Programm starten, sobald der Loader geladen ist. | true |
sourceMap | Eine JavaScript-Source-Map ausgeben. | false |
entrypoint (oder jvm.main) ist auch mit autoRun = false erforderlich. Übergeben Sie für diese vier Einstellungen
keine rohen Flags. Anleitung: WebImage; Artefakte auf Flag-Basis:
Migration.
Veröffentlichung
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 baut die ausgewählten JARs und installiert sie mit einem POM in das lokale Maven-Repository. Die Version
ist die version des Projekts. Eine Publikation braucht eine groupId, eine version und genau ein Jar. Ein
SourceJar wird unter seinem classifier veröffentlicht (Standard sources), ein JavadocJar unter javadoc. Ein
relatives localRepository wird relativ zum Manifest aufgelöst, das es deklariert.
| Manifest | Veröffentlichtes POM |
|---|---|
packages, modules | compile-Abhängigkeiten |
runtimeOnly | runtime-Abhängigkeiten |
compileOnly, devPackages, processors, kotlinPlugins, testPackages | Weggelassen |
exclusions ohne Version | Ein <exclusion> an jeder Abhängigkeit |
| Ein Geschwisterprojekt | Die eigenen Veröffentlichungskoordinaten des Geschwisterprojekts |
Ein Geschwisterprojekt in Jar.from | Seine packages, modules und runtimeOnly, sofern noch nicht aufgeführt |
| Ein lokaler JAR-Pfad | Ein Fehler; Nutzer können ihn nicht auflösen |
Das POM listet außerdem als compile-Abhängigkeiten die Bibliotheken, die Elide ohne Deklaration auf den Classpath
eines Kotlin-Projekts setzt, denn Nutzer brauchen sie zur Laufzeit: kotlin-stdlib und kotlin-reflect in der
Kotlin-Version des Projekts sowie die Laufzeitbibliotheken, die kotlin.features einschaltet
(kotlinx-coroutines-core, kotlinx-serialization, die Metro-Laufzeit). Sie erscheinen im veröffentlichten POM, auch
wenn elide.pkl sie nicht nennt. Schalten Sie eine dort ab, wo sie herkommt (kotlin.features oder
kotlin.compilerOptions.noStdlib), oder deklarieren Sie sie selbst, um eine andere Version festzulegen.
jvm.features.graalvm fügt das GraalVM-SDK mit Scope runtime hinzu.
elide publish --to <name> veröffentlicht stattdessen in ein Repository aus repositories, mit Prüfsummen .md5,
.sha1, .sha256 und .sha512 für jede Datei. Zugangsdaten kommen aus ELIDE_MAVEN_<NAME>_USERNAME und
ELIDE_MAVEN_<NAME>_PASSWORD, wobei <NAME> der Repository-Name in Großbuchstaben ist und jedes Zeichen außer
Buchstaben und Ziffern zu _ wird (internal → ELIDE_MAVEN_INTERNAL_USERNAME, my-repo → ELIDE_MAVEN_MY_REPO_…),
andernfalls aus den credentials des Repositorys. Zwei Namen, die auf dieselben Variablen abbilden (my-repo und
my_repo), werden abgelehnt. Reine http://-Repositorys außer localhost werden ohne --allow-http-repositories
abgelehnt.
Ist signing gesetzt, signiert eine entfernte Veröffentlichung jede Datei mit dem gpg-Programm (<file>.asc);
signing {} signiert mit dem Standardschlüssel von gpg, und signing { gpg { keyName = "…" } } wählt einen aus. Eine
lokale Veröffentlichung signiert nur mit --sign, und --no-sign schaltet das Signieren ab. gpg-agent fragt nach der
Passphrase. Setzen Sie für CI ELIDE_GPG_PASSPHRASE; Elide übergibt sie per Loopback-Pinentry an gpg. Elide liest den
Schlüssel nie selbst.
Ein CentralPortal-Repository veröffentlicht über das Central Publisher Portal auf Maven Central. Erstellen Sie im
Portal ein Benutzertoken und übergeben Sie es als ELIDE_MAVEN_<NAME>_USERNAME und ELIDE_MAVEN_<NAME>_PASSWORD. Alle
Projekte des Laufs kommen in ein signiertes Bundle mit Prüfsummen und ein Deployment, das das Portal als Einheit
validiert und freigibt. Elide wartet, bis das Portal es validiert hat, und schlägt mit den Fehlern des Portals fehl,
wenn es die Prüfung nicht besteht. --no-wait kehrt stattdessen direkt nach dem Upload zurück.
CentralPortal-Eigenschaft | Bedeutung | Standard |
|---|---|---|
publishingType | USER_MANAGED: Sie geben das validierte Deployment selbst im Portal frei. AUTOMATIC: Freigabe nach der Validierung. | USER_MANAGED |
url | Portal, in das hochgeladen wird. | https:/ |
Vor dem Bauen prüft Elide, was Central verlangt, und meldet alles Fehlende auf einmal: pom name, description,
url, licenses, developers und scm.url; ein SourceJar- und ein JavadocJar-Artefakt; Signieren (daher wird
--no-sign abgelehnt); und eine Version, die kein -SNAPSHOT ist.
In einem Workspace erben Mitglieder den publishing-Block der Wurzel außer artifactId und artifacts, und die
eigenen Einstellungen eines Mitglieds haben Feld für Feld Vorrang. Repositorys werden nach Namen geerbt. Ein Projekt,
das kein JAR baut, veröffentlicht nichts Geerbtes.
Um nur einige Projekte eines Workspace zu veröffentlichen, nennen Sie sie (elide publish core util), statt ihre
publishing-Blöcke zu ändern, oder übergeben Sie --skip-existing, um jede Version auszulassen, die bereits im Ziel
liegt; siehe elide publish.
Tests
import "elide:Testing.pkl" as Testing
testing { reports { Testing.xmlReport() } }| Eigenschaft | Bedeutung |
|---|---|
testing.reports | Berichtsformate für jeden Runner, geschrieben nach .; entspricht --reporter=junit. |
Abdeckung
import "elide:Coverage.pkl" as Coverage
coverage {
enabled = true
scope = "tests"
jvm {
excludes { "org.example.generated.*" }
reports { Coverage.xmlReport(); Coverage.htmlReport() }
}
js { paths { "src" } }
}| Eigenschaft | Bedeutung | Standard |
|---|---|---|
coverage.enabled | Abdeckung ohne --coverage erfassen. | false |
coverage.scope | Tasks, die erfassen: "tests", "runs" oder "all". --coverage erfasst immer den Task, an den es übergeben wird. | "tests" |
coverage.jvm.reports | JVM-Berichtsformate: Coverage.htmlReport(), xmlReport(), csvReport(), geschrieben nach .. | keine |
coverage.jvm.excludes | Klassennamenmuster (*, ?), die nicht instrumentiert werden, etwa generierter Code. | keine |
coverage.js.paths | Quellwurzeln für JavaScript und TypeScript, als LCOV in . berichtet. Leer berichtet das ganze Projekt. | keine |
Siehe Tests › Abdeckung.
Workspaces
workspace { members { "core"; "app" } }Jedes Mitglied ist ein Verzeichnis mit eigener elide.pkl; Mitglieder können keine Mitglieder haben.
elide init --template workspace erstellt eine Wurzel mit einer core-Bibliothek und einer app, die davon abhängt.
| Verhalten | Regel |
|---|---|
| Build-Umfang | Von der Wurzel aus umfassen elide build/elide test jedes Projekt; von einem Mitglied aus nur dieses Mitglied. |
| Projektübergreifende Tasks | elide build core:compile-kotlin-main, oder elide build core für seine Standard-Tasks. |
| Gemeinsamer Zustand | Aufgelöste Abhängigkeiten und Build-Zustand liegen im .dev der Wurzel; Ausgaben bleiben im .dev jedes Projekts. |
| Versionsfestlegung | Ein Mitglied kann eine Maven-Version weglassen und die der Wurzel übernehmen; eine abweichende Version ist ein Fehler. |
// 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 } } }| Referenz | Bedeutung |
|---|---|
project("core") | Das Jvm.Jar-Artefakt des Projekts und sein Compile-Classpath, bei Bedarf gebaut. JVM-Quellen allein zählen nicht. |
project("core"). | Ein JAR auswählen, wenn das Projekt mehrere deklariert. |
project("core"). | Zusätzlich die Kotlin-internal-Deklarationen von core sehen, nicht die seiner Abhängigkeiten. Nur in packages, modules, compileOnly, testPackages. |
new Jvm. | Das JAR von core in dieses entpacken und es zuvor bauen; keine Abhängigkeit nötig. |
module.project("core") | Diese Form innerhalb eines Objektkörpers verwenden; ein bloßes project(…) wird dort nicht aufgelöst. |
new Artifacts. | Explizite Form; import "elide:Artifacts.. |
Eine Referenz auf ein Projekt ohne JAR oder ein falsch platziertes friend() schlägt fehl, wenn der Build konfiguriert
wird.