Zum Inhalt springen

elide.pkl-Referenz

Alle Blöcke und Felder des Elide-Projektmanifests elide.pkl: Metadaten, Quellen, Abhängigkeiten, JVM, Kotlin, JavaScript, Artefakte, Tests und Workspaces.

Auf dieser Seite

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 VersionErgebnis
Älter als das laufende ElideDiese Version wird verwendet; eine seither entfernte Eigenschaft schlägt fehl und nennt die Version.
Neuer als das laufende ElideErlaubt; eine Eigenschaft, die das laufende Elide nicht kennt, schlägt fehl und nennt das nötige Upgrade.
Andere Major-VersionAbgelehnt.

elide project export gibt das ausgewertete Manifest als JSON aus; elide build --inspect listet seine Tasks auf.

Projektmetadaten

EigenschaftZweck
name, version, descriptionProjektidentität; version benennt auch Anwendungsarchive.
entrypointDatei(en), die elide run ohne Argument verwendet.
scriptsBenannte Shell-Befehle für elide run NAME.
sourcesSource-Sets; siehe Quellen.
dependenciesMaven-, npm- und PyPI-Pakete; siehe Abhängigkeiten.
jvm, kotlin, javascriptSprach- und Compiler-Einstellungen.
nativeImageAkzeptiert, aber nicht angewendet; setzen Sie die options jedes Artefakts.
engineKontexte für Server; siehe Engine-Kontexte.
toolchainAkzeptierte Elide-Versionen; siehe Werkzeugkette.
devQuellinformationen, MCP, Entwicklungsserver; siehe Dev.
webEinstellungen für Web-Assets; siehe Web.
artifactsBuild-Ausgaben; siehe Artefakte.
testingTestberichte; siehe Tests.
coverageAbdeckung; siehe Tests › Abdeckung.
workspaceMitgliedsprojekte; 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 }
}
EigenschaftBedeutungStandard
topology"prespawn", der einzige Wert."prespawn"
contexts.spawnAnzahl der Kontexte: eine positive Ganzzahl oder "auto" (physische Kerne minus reserve, begrenzt).1
contexts.reserveFür "auto" abgezogene Kerne; bindet keine CPUs.2
contexts.min, contexts.maxGrenzen für jede Anzahl.1, keine
maxContextsVeraltete 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.

EigenschaftBedeutungStandard
enabledfalse schaltet Telemetrie aus, unabhängig von der Umgebung.—
service.name, .version, .namespace, .environmentRessourcenattribute service.* und deployment.environment.name.unknown_service:elide
resourceZusätzliche Ressourcenattribute.—
destinationsBenannte Ziele für die Telemetrie.keine
traces.enabled, .sampler, .ratio, .propagatorsSpans der Anwendung. Sampler wie bei OTEL_TRACES_SAMPLER.an, parentbased_always_on, tracecontext + baggage
metrics.enabled, .interval, .temporalityMetriken der Anwendung.an, 60.s, cumulative
logs.enabled, .level, .consoleLogs der Anwendung; console exportiert console.*, Python-logging und ähnliche Ausgaben.an, info, an
profiles.enabled, .frequencyCPU-Profile des Gastcodes (experimentell).aus, 100 pro Sekunde
runtime.traces, .metrics, .logsElides eigene Spans, Metriken und Log-Schwelle.an, an, warn
propagation.baggageW3C-Baggage im HTTP-Server und in den HTTP-Clients von Elide; siehe Baggage.aus
shutdownTimeoutFrist für den letzten Export beim Beenden.5.s

Jedes Ziel:

EigenschaftBedeutungStandard
providerotlp, sentry, datadog, posthog, honeycomb oder grafana.otlp
endpointBasis-URL; ersetzt den Host eines Anbieters. Bei HTTP wird /v1/<signal> angehängt.http://localhost:4318 (4317 für gRPC)
protocolgrpc, http/protobuf oder http/json.http/protobuf
headers, headerEnvFeste Header und Header aus benannten Variablen.—
credentialVariable mit dem Schlüssel des Anbieters: DD_API_KEY, POSTHOG_PROJECT_TOKEN, HONEYCOMB_API_KEY, GRAFANA_CLOUD_OTLP_CREDENTIAL.wie aufgeführt
dsnVariable mit einem Sentry-DSN.SENTRY_DSN
siteDatadog-Site: us1, us3, us5, eu, ap1, ap2, gov oder eine Domain.DD_SITE, dann us1
regionus/eu (PostHog, Honeycomb) oder eine Grafana-Cloud-Zone wie prod-us-east-0.us
signalstraces, metrics, logs, profiles.was der Anbieter akzeptiert
compression, timeoutKomprimierung und Frist der Anfragen.gzip, 10.s
perSignalendpoint, protocol, headers, headerEnv, compression, timeout pro Signal.—
AnbieterStandardmäßig gesendete SignaleEbenfalls akzeptiertProtokolle
otlpTraces, Metriken, LogsProfilealle
sentryTraces, Logs—http/protobuf
datadogMetriken (Delta), LogsTraces (Agentless-Intake-Vorschau)http/protobuf; http/json außer für Logs
posthogLogsTraceshttp/protobuf
honeycombTraces, Metriken, Logs—alle
grafanaTraces, 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" }
    }
  }
}
EigenschaftBedeutungStandard
inboundDie baggage-Header eingehender Anfragen werden zur Baggage des Handlers.false
outboundAusgehende fetch- und HTTP-Client-Anfragen tragen die aktuelle Baggage, sofern die Anfrage baggage nicht selbst setzt.false
allowIn beiden Richtungen erlaubte Schlüssel.alle Schlüssel
spanAttributesEingehende 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" } }
  }
}
EigenschaftBedeutungLeer oder fehlend
type"source", "test", "example" oder "other".Aus dem Namen abgeleitet.
pathsGlobs oder Verzeichnisse.src/<name>/<language>.
resourcesPfade oder Wurzeln der Form new { from; into }.src/<name>/resources.
dependsOnFü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" } }
}
BlockEigenschaften
mavenpackages, devPackages, modules, compileOnly, runtimeOnly, processors, testPackages, kotlinPlugins, exclusions, substitutions, repositories, enableDefaultRepositories, localRepository
npmpackages, devPackages
pypipackages, optionalPackages (benannte Gruppen); elide install installiert sie nicht.
springversion, starter, testStarter; wird zu maven expandiert.
WertForm
Maven-Eintrag"group:artifact:version[:classifier]", eine MavenPackageSpec (group, name, version, classifier oder coordinate), ein lokaler JAR-Pfad oder eine Projektreferenz.
RepositoryEine URL oder eine Spezifikation mit url, name, description, credentials (username, password, ntlmDomain, ntlmWorkstation).
Schlüssel in substitutionsgroup: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" } } }
}
EigenschaftBedeutungStandard
mainEinstiegsklasse für elide run, JARs, Anwendungen und Native Images.—
targetBytecode-Ziel: 8 … 29, 1.8, "latest", "stable" oder "auto"."auto" (21)
javaHomeJava-Home für externe Kompilierungen und abgezweigte JVMs.Elides eigenes
preferBaliExterne JVM-Läufe starten bali aus dem PATH statt java, oder warnen und verwenden java.false
features.testingJUnit-Abhängigkeiten in Test-Sets.true
features.automodulesAutomatische Module für JARs ohne Deskriptor.true
features.graalvmorg.graalvm-SDK-APIs auf dem Compile-Classpath.false
java.source, java.releaseQuell- und --release-Level; siehe Java-Compiler."auto"
java.compiler.mode"embedded" oder "external"."embedded"
java.compiler.flagsZusätzliche javac-Flags.keine
java.sourceSetsrelease und flags pro Source-Set; siehe Java-Compiler.keine
flagsJVM-Flags für elide run, die Test-JVM und Startskripte.keine
defsSystemeigenschaften (-D), überall dort angewendet, wo flags gelten.keine
debugMit -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" } }
}
EigenschaftBedeutung
apiLevel, languageLevel"auto", "latest", "stable" oder "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 } oder new Kotlin.CustomKotlinToolchain { path }.
pluginsOptionen pro Compiler-Plugin-ID, übergeben als -P plugin:<id>:<key>=<value>.

Standardwerte: Kotlin-Compiler.

JavaScript

EigenschaftBedeutungStandard
javascript.ecmaDeklarierte 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" } }
EigenschaftBedeutung
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" } }
  }
}
EigenschaftBedeutungStandard
source.platform, source.project, source.subpathQuell-Host: "github", "gitlab", "bitbucket", "git" oder ein anderer Name.—
mcp.registerElideElide als MCP-Werkzeug registrieren.true
mcp.adviceelide project advice als MCP-Ressource bereitstellen.true
mcp.resourcesZusätzliche MCP-Ressourcen: path, name, description, mimeType (ohne Angabe erkannt).keine
server.host, server.portVon elide dev nicht verwendet; es nimmt --host/--port (Standard 127.0.0.1:3000)."0.0.0.0", 8080

Web

EigenschaftBedeutungStandard
web.css.minifyGebautes CSS minifizieren.true
web.css.targetsBrowser-Ziele: new { browser = "chrome"; version = "120" }.keine
web.minifyHtmlGerendertes HTML minifizieren.true
web.browsersBrowser-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>/.

TypModulFelder
Jar, SourceJar, JavadocJar, JvmApplicationelide:Jvm.pklJAR-Erstellung
NativeImageelide:NativeImage.pklNative Image
WebImageelide:NativeImage.pklWebImage
ContainerImageelide:Container.pklJVM-Container
StaticSiteelide:Web.pklStatische Websites
Gemeinsames FeldBedeutung
dependsOnNamen 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:

EigenschaftWerteStandard
backend"wasm-gc" (GC des Hosts) oder "wasm-lm" (linearer Speicher)."wasm-gc"
runtime"generic", "browser" oder "node"."generic"
autoRunDas Programm starten, sobald der Loader geladen ist.true
sourceMapEine 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.

ManifestVeröffentlichtes POM
packages, modulescompile-Abhängigkeiten
runtimeOnlyruntime-Abhängigkeiten
compileOnly, devPackages, processors, kotlinPlugins, testPackagesWeggelassen
exclusions ohne VersionEin <exclusion> an jeder Abhängigkeit
Ein GeschwisterprojektDie eigenen Veröffentlichungskoordinaten des Geschwisterprojekts
Ein Geschwisterprojekt in Jar.fromSeine packages, modules und runtimeOnly, sofern noch nicht aufgeführt
Ein lokaler JAR-PfadEin 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-EigenschaftBedeutungStandard
publishingTypeUSER_MANAGED: Sie geben das validierte Deployment selbst im Portal frei. AUTOMATIC: Freigabe nach der Validierung.USER_MANAGED
urlPortal, in das hochgeladen wird.https://central.sonatype.com

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() } }
EigenschaftBedeutung
testing.reportsBerichtsformate für jeden Runner, geschrieben nach .dev/reports/tests/<language>/<source-set>/; 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" } }
}
EigenschaftBedeutungStandard
coverage.enabledAbdeckung ohne --coverage erfassen.false
coverage.scopeTasks, die erfassen: "tests", "runs" oder "all". --coverage erfasst immer den Task, an den es übergeben wird."tests"
coverage.jvm.reportsJVM-Berichtsformate: Coverage.htmlReport(), xmlReport(), csvReport(), geschrieben nach .dev/reports/coverage/jvm/<task>/.keine
coverage.jvm.excludesKlassennamenmuster (*, ?), die nicht instrumentiert werden, etwa generierter Code.keine
coverage.js.pathsQuellwurzeln für JavaScript und TypeScript, als LCOV in .dev/reports/coverage/js/lcov.info 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.

VerhaltenRegel
Build-UmfangVon der Wurzel aus umfassen elide build/elide test jedes Projekt; von einem Mitglied aus nur dieses Mitglied.
Projektübergreifende Taskselide build core:compile-kotlin-main, oder elide build core für seine Standard-Tasks.
Gemeinsamer ZustandAufgelöste Abhängigkeiten und Build-Zustand liegen im .dev der Wurzel; Ausgaben bleiben im .dev jedes Projekts.
VersionsfestlegungEin 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 } } }
ReferenzBedeutung
project("core")Das Jvm.Jar-Artefakt des Projekts und sein Compile-Classpath, bei Bedarf gebaut. JVM-Quellen allein zählen nicht.
project("core").artifact("fat")Ein JAR auswählen, wenn das Projekt mehrere deklariert.
project("core").friend()Zusätzlich die Kotlin-internal-Deklarationen von core sehen, nicht die seiner Abhängigkeiten. Nur in packages, modules, compileOnly, testPackages.
new Jvm.Jar { from { core } }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.ProjectArtifact { project = "core"; artifact = "fat" }Explizite Form; import "elide:Artifacts.pkl" as Artifacts.

Eine Referenz auf ein Projekt ohne JAR oder ein falsch platziertes friend() schlägt fehl, wenn der Build konfiguriert wird.

War diese Seite hilfreich?