Saltar al contenido

Referencia de elide.pkl

Todos los bloques y campos del manifiesto de proyecto elide.pkl de Elide: metadatos, fuentes, dependencias, JVM, Kotlin, JavaScript, artefactos, pruebas y espacios de trabajo.

En esta página

elide.pkl es el manifiesto del proyecto: declara compilaciones, dependencias, pruebas y artefactos. Todo archivo empieza con:

amends "elide:project.pkl"

elide: apunta al esquema incluido en el Elide en ejecución, para este y cualquier otro módulo (elide:Jvm.pkl). Para fijar una versión del esquema, enmiende la URL publicada: pkl.elide.dev/1.6.0/project.pkl.

La versión en desarrollo sigue a main hasta su versión estable. Las versiones publicadas del esquema son inmutables.

Las versiones de parche dentro de una línea MAJOR.MINOR solo añaden propiedades. Una versión menor puede eliminar, renombrar o cambiar el tipo de propiedades y cambiar valores predeterminados.

Versión fijadaResultado
Anterior al Elide en ejecuciónSe usa esa versión; una propiedad eliminada desde entonces falla e indica la versión.
Posterior al Elide en ejecuciónPermitido; una propiedad que el Elide en ejecución no conoce falla e indica la actualización necesaria.
Otra versión mayorRechazada.

elide project export imprime el manifiesto evaluado como JSON; elide build --inspect lista sus tareas.

Metadatos del proyecto

PropiedadPropósito
name, version, descriptionIdentidad del proyecto; version también da nombre a los archivos de la aplicación.
entrypointArchivo(s) que usa elide run cuando no recibe ninguno.
scriptsComandos de shell con nombre para elide run NAME.
sourcesConjuntos de fuentes; consulte Fuentes.
dependenciesPaquetes de Maven, npm y PyPI; consulte Dependencias.
jvm, kotlin, javascriptAjustes del lenguaje y del compilador.
nativeImageSe acepta pero no se aplica; defina las options de cada artefacto.
engineContextos de servicio; consulte Contextos del motor.
toolchainVersiones de Elide aceptadas; consulte Cadena de herramientas.
devInformación del código fuente, MCP, servidor de desarrollo; consulte Dev.
webAjustes de recursos web; consulte Web.
artifactsSalidas de compilación; consulte Artefactos.
testingInformes de pruebas; consulte Pruebas.
coverageCobertura; consulte Pruebas › Cobertura.
workspaceProyectos miembros; consulte Espacios de trabajo.

build.flags contiene los valores de -f/--flag; consulte Opciones de compilación.

Contextos del motor

engine {
  topology = "prespawn"
  contexts { spawn = "auto"; reserve = 2; min = 1; max = 16 }
}
PropiedadSignificadoPredeterminado
topology"prespawn", el único valor."prespawn"
contexts.spawnNúmero de contextos: un entero positivo, o "auto" (núcleos físicos menos reserve, acotado).1
contexts.reserveNúcleos que se restan para "auto"; no fija CPU.2
contexts.min, contexts.maxLímites para cualquier número.1, ninguno
maxContextsNúmero fijo obsoleto; no se puede combinar con contexts.—

Cada contexto evalúa el módulo de entrada una vez, con sus propios globales, antes de que el servidor esté listo. --contexts=N|auto en run, serve y dev anula spawn. Más de un contexto requiere Linux.

Bloque de 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 telemetría está desactivada hasta que exista un destino aquí, en variables OTEL_*/ELIDE_OTEL_* o en opciones --otel-*. Estas anulan este bloque, las opciones primero; consulte Variables de entorno del runtime. elide run, elide serve, elide test, elide build y elide install leen este bloque dentro de un proyecto; elide run file.js dentro de un proyecto lo lee cuando elide.pkl contiene la palabra opentelemetry. Consulte Configuración. Las credenciales nunca se escriben aquí: indique la variable de entorno que las contiene.

PropiedadSignificadoPredeterminado
enabledfalse desactiva la telemetría, diga lo que diga el entorno.—
service.name, .version, .namespace, .environmentAtributos de recurso service.* y deployment.environment.name.unknown_service:elide
resourceAtributos de recurso adicionales.—
destinationsDestinos con nombre a los que enviar telemetría.ninguno
traces.enabled, .sampler, .ratio, .propagatorsSpans de la aplicación. Muestreadores como en OTEL_TRACES_SAMPLER.activado, parentbased_always_on, tracecontext + baggage
metrics.enabled, .interval, .temporalityMétricas de la aplicación.activado, 60.s, cumulative
logs.enabled, .level, .consoleRegistros de la aplicación; console exporta console.*, logging de Python y salidas similares.activado, info, activado
profiles.enabled, .frequencyPerfiles de CPU del código invitado (experimental).desactivado, 100 por segundo
runtime.traces, .metrics, .logsSpans, métricas y umbral de registro propios de Elide.activado, activado, warn
propagation.baggageBaggage W3C en el servidor y los clientes HTTP de Elide; consulte Baggage.desactivado
shutdownTimeoutPlazo de la exportación final al salir.5.s

Cada destino:

PropiedadSignificadoPredeterminado
providerotlp, sentry, datadog, posthog, honeycomb o grafana.otlp
endpointURL base; sustituye el host de un proveedor. Con HTTP se añade /v1/<signal>.http://localhost:4318 (4317 para gRPC)
protocolgrpc, http/protobuf o http/json.http/protobuf
headers, headerEnvCabeceras literales y cabeceras leídas de variables con nombre.—
credentialVariable con la clave del proveedor: DD_API_KEY, POSTHOG_PROJECT_TOKEN, HONEYCOMB_API_KEY, GRAFANA_CLOUD_OTLP_CREDENTIAL.las indicadas
dsnVariable con un DSN de Sentry.SENTRY_DSN
siteSitio de Datadog: us1, us3, us5, eu, ap1, ap2, gov o un dominio.DD_SITE, luego us1
regionus/eu (PostHog, Honeycomb), o una zona de Grafana Cloud como prod-us-east-0.us
signalstraces, metrics, logs, profiles.lo que acepte el proveedor
compression, timeoutCompresión y plazo de las peticiones.gzip, 10.s
perSignalendpoint, protocol, headers, headerEnv, compression, timeout por señal.—
ProveedorSeñales enviadas por defectoTambién aceptaProtocolos
otlptrazas, métricas, registrosperfilestodos
sentrytrazas, registros—http/protobuf
datadogmétricas (delta), registrostrazas (vista previa de ingesta sin agente)http/protobuf; http/json salvo registros
posthogregistrostrazashttp/protobuf
honeycombtrazas, métricas, registros—todos
grafanatrazas, métricas, registros—http/protobuf

Los errores se envían como entradas de registro y eventos de span exception, además de la métrica elide.errors, de modo que todo proveedor que acepte registros, trazas o métricas los recibe. Consulte Descripción general de OpenTelemetry para el uso y Proveedores para cada proveedor. Pedir a un proveedor una señal o un protocolo que no acepta es un error.

Baggage

El servidor y los clientes HTTP de Elide propagan traceparent y tracestate. Solo transmiten baggage W3C cuando usted activa una dirección, porque el baggage que llega de un cliente es una entrada no confiable:

opentelemetry {
  propagation {
    baggage {
      inbound = true
      outbound = true
      allow { "tenant"; "region" }
      spanAttributes { "tenant" }
    }
  }
}
PropiedadSignificadoPredeterminado
inboundLas cabeceras baggage de las peticiones atendidas pasan a ser el baggage del manejador.false
outboundLas peticiones salientes de fetch y del cliente HTTP llevan el baggage actual, salvo que la petición defina baggage por sí misma.false
allowClaves permitidas en ambas direcciones.todas las claves
spanAttributesClaves entrantes registradas en el span del servidor como baggage.<key>; cada una debe estar en allow.ninguna

Una cabecera de más de 8192 bytes o 180 miembros, o con algún miembro mal formado, se descarta entera. El baggage recibido de un cliente llega a las peticiones salientes solo cuando ambas direcciones están activadas. El código de la aplicación siempre puede leer, definir y enviar baggage mediante la API de OpenTelemetry; OTEL_PROPAGATORS solo afecta a esa API.

Fuentes

sources {
  ["main"] = "lib/**/*.kt"
  ["integrationTest"] {
    type = "test"
    dependsOn { "main" }
    paths { "it/**/*.kt" }
    resources { "it/fixtures"; new { from = "it/config"; into = "META-INF" } }
  }
}
PropiedadSignificadoVacía o ausente
type"source", "test", "example" u "other".Se deduce del nombre.
pathsGlobs o directorios.src/<name>/<language>.
resourcesRutas, o raíces new { from; into }.src/<name>/resources.
dependsOnConjuntos de fuentes visibles para este.Ausente: los conjuntos de prueba y de ejemplo ven main. Vacía: nada.

Consulte Conjuntos de fuentes.

Dependencias

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" } }
}
BloquePropiedades
mavenpackages, devPackages, modules, compileOnly, runtimeOnly, processors, testPackages, kotlinPlugins, exclusions, substitutions, repositories, enableDefaultRepositories, localRepository
npmpackages, devPackages
pypipackages, optionalPackages (grupos con nombre); elide install no los instala.
springversion, starter, testStarter; se expande en maven.
ValorForma
Entrada de Maven"group:artifact:version[:classifier]", un MavenPackageSpec (group, name, version, classifier o coordinate), una ruta a un JAR local o una referencia a un proyecto.
RepositorioUna URL, o una especificación con url, name, description, credentials (username, password, ntlmDomain, ntlmWorkstation).
Clave de substitutionsgroup:artifact (cualquier versión) o group:artifact:version; el valor es una ruta de archivo.

Una sustitución conserva las dependencias transitivas de la coordenada y la reemplaza por el archivo en todos los classpaths. Las rutas se resuelven respecto al manifiesto que las declara; los miembros heredan las de la raíz. La tarea que genera el archivo debe ejecutarse antes. Grupos y repositorios: Dependencias.

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" } } }
}
PropiedadSignificadoPredeterminado
mainClase de punto de entrada para elide run, JAR, aplicaciones e imágenes nativas.—
targetDestino de bytecode: 8 … 29, 1.8, "latest", "stable" o "auto"."auto" (21)
javaHomeJava home para compilaciones externas y JVM en procesos separados.el de Elide
preferBaliLas ejecuciones en una JVM externa lanzan bali desde PATH en lugar de java, o avisan y usan java.false
features.testingDependencias de JUnit en los conjuntos de prueba.true
features.automodulesMódulos automáticos para JAR sin descriptor.true
features.graalvmAPI del SDK org.graalvm en el classpath de compilación.false
java.source, java.releaseNiveles de código fuente y de --release; consulte Compilador Java."auto"
java.compiler.mode"embedded" o "external"."embedded"
java.compiler.flagsOpciones adicionales de javac.ninguna
java.sourceSetsrelease y flags por conjunto de fuentes; consulte Compilador Java.ninguno
flagsOpciones de la JVM para elide run, la JVM de pruebas y los scripts de inicio.ninguna
defsPropiedades del sistema (-D), aplicadas allí donde se aplican las flags.ninguna
debugCompilar con -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" } }
}
PropiedadSignificado
apiLevel, languageLevel"auto", "latest", "stable" o "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 } o new Kotlin.CustomKotlinToolchain { path }.
pluginsOpciones por id de plugin del compilador, pasadas como -P plugin:<id>:<key>=<value>.

Valores predeterminados: Compilador Kotlin.

JavaScript

PropiedadSignificadoPredeterminado
javascript.ecmaEdición de ECMAScript declarada: un año 2015 … 2025, "stable" o "latest". elide project info la muestra; no cambia qué sintaxis se ejecuta ni cómo se compila el código (Lenguaje JavaScript)."stable"

Cadena de herramientas

toolchain { engines { ["elide"] = ">=1.6.0" } }
PropiedadSignificado
engines["elide"]Versión o rango semver, o new { version = "…" }; un Elide en ejecución fuera de él no pasa la validación.
engines[<other>]Se acepta, no se aplica.

Dev

dev {
  source { platform = "github"; project = "example/app" }
  mcp {
    registerElide = true
    advice = true
    resources { new { path = "docs/ARCHITECTURE.md"; name = "architecture" } }
  }
}
PropiedadSignificadoPredeterminado
source.platform, source.project, source.subpathAlojamiento del código fuente: "github", "gitlab", "bitbucket", "git" u otro nombre.—
mcp.registerElideRegistrar Elide como herramienta MCP.true
mcp.adviceExponer elide project advice como recurso MCP.true
mcp.resourcesRecursos MCP adicionales: path, name, description, mimeType (se detecta si se omite).ninguno
server.host, server.portelide dev no los usa; recibe --host/--port (por defecto 127.0.0.1:3000)."0.0.0.0", 8080

Web

PropiedadSignificadoPredeterminado
web.css.minifyMinificar el CSS compilado.true
web.css.targetsNavegadores de destino: new { browser = "chrome"; version = "120" }.ninguno
web.minifyHtmlMinificar el HTML renderizado.true
web.browsersNavegadores de destino para todas las salidas; css.targets lo anula para CSS.ninguno

Consulte Cadena de herramientas web.

Artefactos

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 clave da nombre a la tarea de compilación. Las salidas van a .dev/artifacts/<kind>/.

TipoMóduloCampos
Jar, SourceJar, JavadocJar, JvmApplicationelide:Jvm.pklEnsamblado de JAR
NativeImageelide:NativeImage.pklNative Image
WebImageelide:NativeImage.pklWebImage
ContainerImageelide:Container.pklContenedores JVM
StaticSiteelide:Web.pklSitios estáticos
Campo comúnSignificado
dependsOnNombres de artefactos que se compilan antes.
name (JAR)"app" y "app.jar" dan ambos app.jar; un SourceJar da app-sources.jar.

WebImage

WebImage admite los campos de NativeImage from, name, entrypoint, moduleName, dependsOn y options, no tiene type y añade:

PropiedadValoresPredeterminado
backend"wasm-gc" (GC del host) o "wasm-lm" (memoria lineal)."wasm-gc"
runtime"generic", "browser" o "node"."generic"
autoRunIniciar el programa cuando se carga el cargador.true
sourceMapGenerar un source map de JavaScript.false

entrypoint (o jvm.main) es obligatorio incluso con autoRun = false. No pase opciones sin procesar para estos cuatro ajustes. Guía: WebImage; artefactos basados en opciones: migración.

Publicación

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 compila los JAR seleccionados y los instala con un POM en el repositorio local de Maven. La versión es la version del proyecto. Una publicación necesita un groupId, una version y exactamente un Jar. Un SourceJar se publica con su classifier (por defecto sources), un JavadocJar con javadoc. Un localRepository relativo se resuelve respecto al manifiesto que lo declara.

ManifiestoPOM publicado
packages, modulesDependencias compile
runtimeOnlyDependencias runtime
compileOnly, devPackages, processors, kotlinPlugins, testPackagesOmitidos
exclusions sin versiónUn <exclusion> en cada dependencia
Un proyecto hermanoLas coordenadas de publicación propias del hermano
Un proyecto hermano en Jar.fromSus packages, modules y runtimeOnly, salvo que ya figuren
Una ruta a un JAR localUn error; los consumidores no pueden resolverla

El POM también lista, como dependencias compile, las bibliotecas que Elide pone en el classpath de un proyecto Kotlin sin declararlas, porque los consumidores las necesitan en tiempo de ejecución: kotlin-stdlib y kotlin-reflect en la versión de Kotlin del proyecto, y los entornos de ejecución que activa kotlin.features (kotlinx-coroutines-core, kotlinx-serialization, el entorno de ejecución de Metro). Aparecen en el POM publicado aunque elide.pkl no los nombre. Desactive uno donde se origina (kotlin.features o kotlin.compilerOptions.noStdlib), o declárelo usted mismo para fijar otra versión. jvm.features.graalvm añade el SDK de GraalVM con ámbito runtime.

elide publish --to <name> publica en cambio en un repositorio de repositories, con sumas de verificación .md5, .sha1, .sha256 y .sha512 para cada archivo. Las credenciales se toman de ELIDE_MAVEN_<NAME>_USERNAME y ELIDE_MAVEN_<NAME>_PASSWORD, donde <NAME> es el nombre del repositorio en mayúsculas con cada carácter que no sea letra o dígito convertido en _ (internal → ELIDE_MAVEN_INTERNAL_USERNAME, my-repo → ELIDE_MAVEN_MY_REPO_…), y si no, de las credentials del repositorio. Se rechazan dos nombres que corresponden a las mismas variables (my-repo y my_repo). Los repositorios http:// sin cifrar que no sean localhost se rechazan sin --allow-http-repositories.

Con signing definido, una publicación remota firma cada archivo con el programa gpg (<file>.asc); signing {} firma con la clave predeterminada de gpg, y signing { gpg { keyName = "…" } } elige una. Una publicación local solo firma con --sign, y --no-sign desactiva la firma. gpg-agent pide la frase de contraseña. Para CI, defina ELIDE_GPG_PASSPHRASE y Elide la pasa a gpg mediante pinentry en modo loopback. Elide nunca lee la clave por sí mismo.

Un repositorio CentralPortal publica en Maven Central a través del Central Publisher Portal. Cree un token de usuario en el Portal y páselo como ELIDE_MAVEN_<NAME>_USERNAME y ELIDE_MAVEN_<NAME>_PASSWORD. Todos los proyectos de la ejecución van en un único paquete firmado y con sumas de verificación, y en un único despliegue, que el Portal valida y publica como una unidad. Elide espera a que el Portal lo haya validado y falla con los errores del Portal si no pasa la validación. --no-wait termina justo después de la subida.

Propiedad de CentralPortalSignificadoPredeterminado
publishingTypeUSER_MANAGED: usted publica el despliegue validado en el Portal. AUTOMATIC: se publica una vez validado.USER_MANAGED
urlPortal al que se sube.https://central.sonatype.com

Antes de compilar, Elide comprueba lo que exige Central e informa de todo lo que falta a la vez: name, description, url, licenses, developers y scm.url de pom; un artefacto SourceJar y uno JavadocJar; la firma (por lo que se rechaza --no-sign); y una versión que no sea -SNAPSHOT.

En un espacio de trabajo, los miembros heredan el bloque publishing de la raíz salvo artifactId y artifacts, y los ajustes propios de un miembro prevalecen campo por campo. Los repositorios se heredan por nombre. Un proyecto que no compila ningún JAR no publica nada de lo que hereda.

Para publicar solo algunos proyectos de un espacio de trabajo, nómbrelos (elide publish core util) en lugar de cambiar sus bloques publishing, o pase --skip-existing para omitir toda versión que ya esté en el destino; consulte elide publish.

Pruebas

import "elide:Testing.pkl" as Testing

testing { reports { Testing.xmlReport() } }
PropiedadSignificado
testing.reportsFormatos de informe para todos los ejecutores, escritos en .dev/reports/tests/<language>/<source-set>/; equivale a --reporter=junit.

Cobertura

import "elide:Coverage.pkl" as Coverage

coverage {
  enabled = true
  scope = "tests"
  jvm {
    excludes { "org.example.generated.*" }
    reports { Coverage.xmlReport(); Coverage.htmlReport() }
  }
  js { paths { "src" } }
}
PropiedadSignificadoPredeterminado
coverage.enabledRecoger cobertura sin --coverage.false
coverage.scopeTareas que recogen: "tests", "runs" o "all". --coverage siempre cubre la tarea a la que se pasa."tests"
coverage.jvm.reportsFormatos de informe de la JVM: Coverage.htmlReport(), xmlReport(), csvReport(), escritos en .dev/reports/coverage/jvm/<task>/.ninguno
coverage.jvm.excludesPatrones de nombres de clase (*, ?) que no se instrumentan, como el código generado.ninguno
coverage.js.pathsRaíces de código fuente JavaScript y TypeScript sobre las que se informa, en formato LCOV en .dev/reports/coverage/js/lcov.info. Si está vacío, se informa de todo el proyecto.ninguno

Consulte Pruebas › Cobertura.

Espacios de trabajo

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

Cada miembro es un directorio con su propio elide.pkl; los miembros no pueden tener miembros. elide init --template workspace crea una raíz con una biblioteca core y una app que depende de ella.

ComportamientoRegla
Alcance de compilaciónDesde la raíz, elide build/elide test cubren todos los proyectos; desde un miembro, solo ese miembro.
Tareas entre proyectoselide build core:compile-kotlin-main, o elide build core para sus tareas predeterminadas.
Estado compartidoLas dependencias resueltas y el estado de compilación viven en el .dev de la raíz; las salidas quedan en el .dev de cada proyecto.
Versiones fijadasUn miembro puede omitir una versión de Maven y tomar la de la raíz; una versión en conflicto es un error.
// 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 } } }
ReferenciaSignificado
project("core")El artefacto Jvm.Jar del proyecto y su classpath de compilación, compilado cuando hace falta. Las fuentes JVM por sí solas no cuentan.
project("core").artifact("fat")Elegir un JAR cuando el proyecto declara varios.
project("core").friend()Ver también las declaraciones internal de Kotlin de core, no las de sus dependencias. Solo en packages, modules, compileOnly, testPackages.
new Jvm.Jar { from { core } }Desempaquetar el JAR de core dentro de este, compilándolo antes; no hace falta ninguna dependencia.
module.project("core")Úselo en el sitio, dentro del cuerpo de un objeto; un project(…) sin calificar no se resuelve ahí.
new Artifacts.ProjectArtifact { project = "core"; artifact = "fat" }Forma explícita; import "elide:Artifacts.pkl" as Artifacts.

Una referencia a un proyecto sin JAR, o un friend() mal colocado, falla al configurar la compilación.

¿Te resultó útil esta página?