Aller au contenu

Référence elide.pkl

Tous les blocs et champs du manifeste de projet elide.pkl d'Elide : métadonnées, sources, dépendances, JVM, Kotlin, JavaScript, artefacts, tests et espaces de travail.

Sur cette page

elide.pkl est le manifeste du projet : il déclare les builds, les dépendances, les tests et les artefacts. Chaque fichier commence par :

amends "elide:project.pkl"

elide: désigne le schéma fourni avec l’Elide en cours d’exécution, pour ce module comme pour tous les autres (elide:Jvm.pkl). Pour épingler une version du schéma, amendez l’URL publiée : pkl.elide.dev/1.6.0/project.pkl.

La version en développement suit main jusqu’à sa version stable. Les versions publiées du schéma sont immuables.

Les versions correctives d’une ligne MAJOR.MINOR ne font qu’ajouter des propriétés. Une version mineure peut supprimer, renommer ou retyper des propriétés et changer des valeurs par défaut.

Version épingléeRésultat
Plus ancienne que l’Elide en cours d’exécutionCette version est utilisée ; une propriété supprimée depuis échoue en indiquant la version.
Plus récente que l’Elide en cours d’exécutionAutorisée ; une propriété inconnue de l’Elide en cours d’exécution échoue en indiquant la mise à jour nécessaire.
Autre version majeureRefusée.

elide project export affiche le manifeste évalué en JSON ; elide build --inspect liste ses tâches.

Métadonnées du projet

PropriétéRôle
name, version, descriptionIdentité du projet ; version nomme aussi les archives d’application.
entrypointFichier(s) qu’utilise elide run quand il n’en reçoit aucun.
scriptsCommandes shell nommées pour elide run NAME.
sourcesSource sets ; voir Sources.
dependenciesPaquets Maven, npm et PyPI ; voir Dépendances.
jvm, kotlin, javascriptRéglages du langage et du compilateur.
nativeImageAccepté mais non appliqué ; définissez les options de chaque artefact.
engineContextes de service ; voir Contextes du moteur.
toolchainVersions d’Elide acceptées ; voir Chaîne d’outils.
devInformations sur les sources, MCP, serveur de développement ; voir Dev.
webRéglages des ressources web ; voir Web.
artifactsSorties de build ; voir Artefacts.
testingRapports de tests ; voir Tests.
coverageCouverture ; voir Tests › Couverture.
workspaceProjets membres ; voir Espaces de travail.

build.flags contient les valeurs de -f/--flag ; voir Options de build.

Contextes du moteur

engine {
  topology = "prespawn"
  contexts { spawn = "auto"; reserve = 2; min = 1; max = 16 }
}
PropriétéSignificationDéfaut
topology"prespawn", la seule valeur."prespawn"
contexts.spawnNombre de contextes : un entier positif, ou "auto" (cœurs physiques moins reserve, borné).1
contexts.reserveCœurs soustraits pour "auto" ; n’épingle aucun CPU.2
contexts.min, contexts.maxBornes de tout nombre.1, aucune
maxContextsNombre fixe déprécié ; incompatible avec contexts.—

Chaque contexte évalue le module d’entrée une fois, avec ses propres globales, avant que le serveur soit prêt. --contexts=N|auto sur run, serve et dev remplace spawn. Plus d’un contexte nécessite Linux.

Bloc 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" }
}

La télémétrie est désactivée tant qu’aucune destination n’existe ici, dans les variables OTEL_*/ELIDE_OTEL_* ou dans les options --otel-*. Celles-ci remplacent ce bloc, les options en premier ; voir Variables d’environnement d’exécution. elide run, elide serve, elide test, elide build et elide install lisent ce bloc dans un projet ; elide run file.js le lit dans un projet quand elide.pkl contient le mot opentelemetry. Voir Configuration. Les identifiants ne sont jamais écrits ici : indiquez la variable d’environnement qui les contient.

PropriétéSignificationDéfaut
enabledfalse désactive la télémétrie, quoi que dise l’environnement.—
service.name, .version, .namespace, .environmentAttributs de ressource service.* et deployment.environment.name.unknown_service:elide
resourceAttributs de ressource supplémentaires.—
destinationsDestinations nommées de la télémétrie.aucune
traces.enabled, .sampler, .ratio, .propagatorsSpans de l’application. Échantillonneurs comme pour OTEL_TRACES_SAMPLER.activé, parentbased_always_on, tracecontext + baggage
metrics.enabled, .interval, .temporalityMétriques de l’application.activé, 60.s, cumulative
logs.enabled, .level, .consoleJournaux de l’application ; console exporte console.*, logging de Python et les sorties similaires.activé, info, activé
profiles.enabled, .frequencyProfils CPU du code invité (expérimental).désactivé, 100 par seconde
runtime.traces, .metrics, .logsSpans, métriques et seuil de journalisation propres à Elide.activé, activé, warn
propagation.baggageBaggage W3C sur le serveur et les clients HTTP d’Elide ; voir Baggage.désactivé
shutdownTimeoutDélai de l’export final à la sortie.5.s

Chaque destination :

PropriétéSignificationDéfaut
providerotlp, sentry, datadog, posthog, honeycomb ou grafana.otlp
endpointURL de base ; remplace l’hôte d’un fournisseur. /v1/<signal> est ajouté en HTTP.http://localhost:4318 (4317 pour gRPC)
protocolgrpc, http/protobuf ou http/json.http/protobuf
headers, headerEnvEn-têtes littéraux, et en-têtes lus dans des variables nommées.—
credentialVariable contenant la clé du fournisseur : DD_API_KEY, POSTHOG_PROJECT_TOKEN, HONEYCOMB_API_KEY, GRAFANA_CLOUD_OTLP_CREDENTIAL.celles listées
dsnVariable contenant un DSN Sentry.SENTRY_DSN
siteSite Datadog : us1, us3, us5, eu, ap1, ap2, gov ou un domaine.DD_SITE, puis us1
regionus/eu (PostHog, Honeycomb), ou une zone Grafana Cloud comme prod-us-east-0.us
signalstraces, metrics, logs, profiles.ce que le fournisseur accepte
compression, timeoutCompression et délai des requêtes.gzip, 10.s
perSignalendpoint, protocol, headers, headerEnv, compression, timeout par signal.—
FournisseurSignaux envoyés par défautÉgalement acceptésProtocoles
otlptraces, métriques, journauxprofilstous
sentrytraces, journaux—http/protobuf
datadogmétriques (delta), journauxtraces (aperçu de l’ingestion sans agent)http/protobuf ; http/json sauf journaux
posthogjournauxtraceshttp/protobuf
honeycombtraces, métriques, journaux—tous
grafanatraces, métriques, journaux—http/protobuf

Les erreurs sont envoyées sous forme d’entrées de journal et d’événements de span exception, plus la métrique elide.errors, si bien que tout fournisseur qui accepte les journaux, les traces ou les métriques les reçoit. Voir Présentation d’OpenTelemetry pour l’utilisation et Fournisseurs pour chaque fournisseur. Demander à un fournisseur un signal ou un protocole qu’il n’accepte pas est une erreur.

Baggage

Le serveur et les clients HTTP d’Elide propagent traceparent et tracestate. Ils ne transmettent le baggage W3C que si vous activez une direction, car le baggage reçu d’un client est une entrée non fiable :

opentelemetry {
  propagation {
    baggage {
      inbound = true
      outbound = true
      allow { "tenant"; "region" }
      spanAttributes { "tenant" }
    }
  }
}
PropriétéSignificationDéfaut
inboundLes en-têtes baggage des requêtes servies deviennent le baggage du gestionnaire.false
outboundLes requêtes sortantes de fetch et du client HTTP portent le baggage courant, sauf si la requête définit elle-même baggage.false
allowClés autorisées dans les deux directions.toutes les clés
spanAttributesClés entrantes enregistrées sur le span serveur en tant que baggage.<key> ; chacune doit figurer dans allow.aucune

Un en-tête de plus de 8 192 octets ou 180 membres, ou contenant un membre mal formé, est entièrement ignoré. Le baggage reçu d’un client n’atteint les requêtes sortantes que si les deux directions sont activées. Le code de l’application peut toujours lire, définir et envoyer du baggage via l’API OpenTelemetry ; OTEL_PROPAGATORS n’affecte que cette API.

Sources

sources {
  ["main"] = "lib/**/*.kt"
  ["integrationTest"] {
    type = "test"
    dependsOn { "main" }
    paths { "it/**/*.kt" }
    resources { "it/fixtures"; new { from = "it/config"; into = "META-INF" } }
  }
}
PropriétéSignificationVide ou absente
type"source", "test", "example" ou "other".Déduit du nom.
pathsGlobs ou répertoires.src/<name>/<language>.
resourcesChemins, ou racines new { from; into }.src/<name>/resources.
dependsOnSource sets visibles depuis celui-ci.Absente : les source sets de test et d’exemple voient main. Vide : aucun.

Voir Source sets.

Dépendances

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" } }
}
BlocPropriétés
mavenpackages, devPackages, modules, compileOnly, runtimeOnly, processors, testPackages, kotlinPlugins, exclusions, substitutions, repositories, enableDefaultRepositories, localRepository
npmpackages, devPackages
pypipackages, optionalPackages (groupes nommés) ; elide install ne les installe pas.
springversion, starter, testStarter ; se développe en maven.
ValeurForme
Entrée Maven"group:artifact:version[:classifier]", un MavenPackageSpec (group, name, version, classifier ou coordinate), un chemin de JAR local, ou une référence de projet.
DépôtUne URL, ou une spécification avec url, name, description, credentials (username, password, ntlmDomain, ntlmWorkstation).
Clé de substitutionsgroup:artifact (toute version) ou group:artifact:version ; la valeur est un chemin de fichier.

Une substitution conserve les dépendances transitives de la coordonnée et la remplace par le fichier sur chaque classpath. Les chemins sont résolus par rapport au manifeste qui les déclare ; les membres héritent de ceux de la racine. La tâche qui génère le fichier doit s’exécuter avant. Groupes et dépôts : Dépendances.

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" } } }
}
PropriétéSignificationDéfaut
mainClasse point d’entrée pour elide run, les JAR, les applications et les images natives.—
targetCible de bytecode : 8 … 29, 1.8, "latest", "stable" ou "auto"."auto" (21)
javaHomeJava home pour les compilations externes et les JVM forkées.celui d’Elide
preferBaliLes exécutions sur une JVM externe lancent bali depuis le PATH au lieu de java, ou avertissent et utilisent java.false
features.testingDépendances JUnit sur les source sets de test.true
features.automodulesModules automatiques pour les JAR sans descripteur.true
features.graalvmAPI du SDK org.graalvm sur le classpath de compilation.false
java.source, java.releaseNiveaux de source et de --release ; voir Compilateur Java."auto"
java.compiler.mode"embedded" ou "external"."embedded"
java.compiler.flagsOptions javac supplémentaires.aucune
java.sourceSetsrelease et flags par source set ; voir Compilateur Java.aucun
flagsOptions JVM pour elide run, la JVM de test et les scripts de démarrage.aucune
defsPropriétés système (-D), appliquées partout où les flags le sont.aucune
debugCompiler avec -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" } }
}
PropriétéSignification
apiLevel, languageLevel"auto", "latest", "stable" ou "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 } ou new Kotlin.CustomKotlinToolchain { path }.
pluginsOptions par identifiant de plugin du compilateur, passées sous la forme -P plugin:<id>:<key>=<value>.

Valeurs par défaut : Compilateur Kotlin.

JavaScript

PropriétéSignificationDéfaut
javascript.ecmaÉdition ECMAScript déclarée : une année 2015 … 2025, "stable" ou "latest". elide project info l’affiche ; elle ne change ni la syntaxe exécutée ni la façon dont le code est construit (Langage JavaScript)."stable"

Chaîne d’outils

toolchain { engines { ["elide"] = ">=1.6.0" } }
PropriétéSignification
engines["elide"]Version ou plage semver, ou new { version = "…" } ; un Elide en cours d’exécution hors de cette plage échoue à la validation.
engines[<other>]Accepté, non appliqué.

Dev

dev {
  source { platform = "github"; project = "example/app" }
  mcp {
    registerElide = true
    advice = true
    resources { new { path = "docs/ARCHITECTURE.md"; name = "architecture" } }
  }
}
PropriétéSignificationDéfaut
source.platform, source.project, source.subpathHébergeur des sources : "github", "gitlab", "bitbucket", "git" ou un autre nom.—
mcp.registerElideEnregistrer Elide comme outil MCP.true
mcp.adviceExposer elide project advice comme ressource MCP.true
mcp.resourcesRessources MCP supplémentaires : path, name, description, mimeType (détecté s’il est omis).aucune
server.host, server.portInutilisés par elide dev, qui prend --host/--port (par défaut 127.0.0.1:3000)."0.0.0.0", 8080

Web

PropriétéSignificationDéfaut
web.css.minifyMinifier le CSS construit.true
web.css.targetsNavigateurs cibles : new { browser = "chrome"; version = "120" }.aucun
web.minifyHtmlMinifier le HTML rendu.true
web.browsersNavigateurs cibles pour toutes les sorties ; css.targets le remplace pour le CSS.aucun

Voir Chaîne d’outils Web.

Artefacts

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
  }
}

La clé nomme la tâche de build. Les sorties vont dans .dev/artifacts/<kind>/.

TypeModuleChamps
Jar, SourceJar, JavadocJar, JvmApplicationelide:Jvm.pklAssemblage JAR
NativeImageelide:NativeImage.pklNative Image
WebImageelide:NativeImage.pklWebImage
ContainerImageelide:Container.pklConteneurs JVM
StaticSiteelide:Web.pklSites statiques
Champ communSignification
dependsOnNoms des artefacts à construire d’abord.
name (JAR)"app" et "app.jar" donnent tous deux app.jar ; un SourceJar donne app-sources.jar.

WebImage

WebImage reprend les champs NativeImage from, name, entrypoint, moduleName, dependsOn et options, n’a pas de type et ajoute :

PropriétéValeursDéfaut
backend"wasm-gc" (GC de l’hôte) ou "wasm-lm" (mémoire linéaire)."wasm-gc"
runtime"generic", "browser" ou "node"."generic"
autoRunDémarrer le programme au chargement du loader.true
sourceMapÉmettre une source map JavaScript.false

entrypoint (ou jvm.main) est requis même avec autoRun = false. Ne passez pas d’options brutes pour ces quatre réglages. Guide : WebImage ; artefacts définis par options : migration.

Publication

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 construit les JAR sélectionnés et les installe avec un POM dans le dépôt Maven local. La version est la version du projet. Une publication nécessite un groupId, une version et exactement un Jar. Un SourceJar est publié sous son classifier (par défaut sources), un JavadocJar sous javadoc. Un localRepository relatif est résolu par rapport au manifeste qui le déclare.

ManifestePOM publié
packages, modulesDépendances compile
runtimeOnlyDépendances runtime
compileOnly, devPackages, processors, kotlinPlugins, testPackagesOmis
exclusions sans versionUn <exclusion> sur chaque dépendance
Un projet frèreLes coordonnées de publication propres au projet frère
Un projet frère dans Jar.fromSes packages, modules et runtimeOnly, sauf s’ils sont déjà listés
Un chemin de JAR localUne erreur ; les consommateurs ne peuvent pas le résoudre

Le POM liste aussi, en tant que dépendances compile, les bibliothèques qu’Elide place sur le classpath d’un projet Kotlin sans déclaration, car les consommateurs en ont besoin à l’exécution : kotlin-stdlib et kotlin-reflect dans la version Kotlin du projet, et les bibliothèques d’exécution qu’active kotlin.features (kotlinx-coroutines-core, kotlinx-serialization, le runtime Metro). Elles figurent dans le POM publié même si elide.pkl ne les nomme pas. Désactivez-en une là d’où elle vient (kotlin.features ou kotlin.compilerOptions.noStdlib), ou déclarez-la vous-même pour épingler une autre version. jvm.features.graalvm ajoute le SDK GraalVM avec la portée runtime.

elide publish --to <name> publie plutôt dans un dépôt de repositories, avec des sommes de contrôle .md5, .sha1, .sha256 et .sha512 pour chaque fichier. Les identifiants viennent de ELIDE_MAVEN_<NAME>_USERNAME et ELIDE_MAVEN_<NAME>_PASSWORD, où <NAME> est le nom du dépôt en majuscules, chaque caractère autre qu’une lettre ou un chiffre étant remplacé par _ (internal → ELIDE_MAVEN_INTERNAL_USERNAME, my-repo → ELIDE_MAVEN_MY_REPO_…), et sinon des credentials du dépôt. Deux noms qui correspondent aux mêmes variables (my-repo et my_repo) sont refusés. Les dépôts en http:// simple autres que localhost sont refusés sans --allow-http-repositories.

Si signing est défini, une publication distante signe chaque fichier avec le programme gpg (<file>.asc) ; signing {} signe avec la clé par défaut de gpg, et signing { gpg { keyName = "…" } } en choisit une. Une publication locale ne signe qu’avec --sign, et --no-sign désactive la signature. gpg-agent demande la phrase secrète. En CI, définissez ELIDE_GPG_PASSPHRASE ; Elide la transmet à gpg via le pinentry en mode loopback. Elide ne lit jamais la clé lui-même.

Un dépôt CentralPortal publie sur Maven Central via le Central Publisher Portal. Créez un jeton utilisateur dans le Portal et passez-le comme ELIDE_MAVEN_<NAME>_USERNAME et ELIDE_MAVEN_<NAME>_PASSWORD. Tous les projets de l’exécution vont dans un seul bundle signé et accompagné de sommes de contrôle, et dans un seul déploiement, que le Portal valide et publie comme un tout. Elide attend que le Portal l’ait validé, et échoue avec les erreurs du Portal si la validation ne passe pas. --no-wait rend la main juste après l’envoi.

Propriété de CentralPortalSignificationDéfaut
publishingTypeUSER_MANAGED : vous publiez vous-même le déploiement validé dans le Portal. AUTOMATIC : publication dès la validation.USER_MANAGED
urlPortal vers lequel envoyer.https://central.sonatype.com

Avant le build, Elide vérifie ce qu’exige Central et signale tout ce qui manque en une fois : name, description, url, licenses, developers et scm.url de pom ; un artefact SourceJar et un artefact JavadocJar ; la signature (donc --no-sign est refusé) ; et une version autre que -SNAPSHOT.

Dans un espace de travail, les membres héritent du bloc publishing de la racine sauf artifactId et artifacts, et les réglages propres d’un membre l’emportent champ par champ. Les dépôts sont hérités par nom. Un projet qui ne construit aucun JAR ne publie rien de ce dont il hérite.

Pour ne publier que certains projets d’un espace de travail, nommez-les (elide publish core util) au lieu de modifier leurs blocs publishing, ou passez --skip-existing pour ignorer toute version déjà présente dans la cible ; voir elide publish.

Tests

import "elide:Testing.pkl" as Testing

testing { reports { Testing.xmlReport() } }
PropriétéSignification
testing.reportsFormats de rapport pour tous les exécuteurs, écrits dans .dev/reports/tests/<language>/<source-set>/ ; équivaut à --reporter=junit.

Couverture

import "elide:Coverage.pkl" as Coverage

coverage {
  enabled = true
  scope = "tests"
  jvm {
    excludes { "org.example.generated.*" }
    reports { Coverage.xmlReport(); Coverage.htmlReport() }
  }
  js { paths { "src" } }
}
PropriétéSignificationDéfaut
coverage.enabledCollecter la couverture sans --coverage.false
coverage.scopeTâches qui collectent : "tests", "runs" ou "all". --coverage couvre toujours la tâche à laquelle il est passé."tests"
coverage.jvm.reportsFormats de rapport JVM : Coverage.htmlReport(), xmlReport(), csvReport(), écrits dans .dev/reports/coverage/jvm/<task>/.aucun
coverage.jvm.excludesMotifs de noms de classe (*, ?) non instrumentés, comme le code généré.aucun
coverage.js.pathsRacines de sources JavaScript et TypeScript à couvrir, rapportées en LCOV dans .dev/reports/coverage/js/lcov.info. Vide : tout le projet.aucune

Voir Tests › Couverture.

Espaces de travail

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

Chaque membre est un répertoire avec son propre elide.pkl ; les membres ne peuvent pas avoir de membres. elide init --template workspace crée une racine avec une bibliothèque core et une app qui en dépend.

ComportementRègle
Portée du buildDepuis la racine, elide build/elide test couvrent tous les projets ; depuis un membre, ce membre seulement.
Tâches inter-projetselide build core:compile-kotlin-main, ou elide build core pour ses tâches par défaut.
État partagéLes dépendances résolues et l’état du build résident dans le .dev de la racine ; les sorties restent dans le .dev de chaque projet.
Versions épingléesUn membre peut omettre une version Maven et reprendre celle de la racine ; une version en conflit est une erreur.
// 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 } } }
RéférenceSignification
project("core")L’artefact Jvm.Jar du projet et son classpath de compilation, construit si nécessaire. Des sources JVM seules ne comptent pas.
project("core").artifact("fat")Choisir un JAR quand le projet en déclare plusieurs.
project("core").friend()Voir aussi les déclarations Kotlin internal de core, pas celles de ses dépendances. Seulement dans packages, modules, compileOnly, testPackages.
new Jvm.Jar { from { core } }Décompresser le JAR de core dans celui-ci, en le construisant d’abord ; aucune dépendance nécessaire.
module.project("core")À utiliser sur place, dans le corps d’un objet ; un project(…) nu ne s’y résout pas.
new Artifacts.ProjectArtifact { project = "core"; artifact = "fat" }Forme explicite ; import "elide:Artifacts.pkl" as Artifacts.

Une référence à un projet sans JAR, ou un friend() mal placé, échoue lors de la configuration du build.

Cette page vous a-t-elle aidé ?