Elide crea y lee archivos JAR directamente con elide jar, y los compila como artefactos del proyecto.
Crear, listar y extraer
Las opciones de jar van después de --:
elide jar -- --create --file app.jar -C out . # create
elide jar -- --list --file app.jar # list
elide jar -- --extract --file app.jar --dir extracted # extract
elide jar -- --create --file app.jar --main-class com.example.Main -C out . # executable JAR
elide jar -- -helpCompilar y crear un JAR
elide javac --jar target/app.jar -- src/Main.java src/Util.java
elide javac --jar target/app.jar --manifest src/MANIFEST.MF -- src/Main.javaArtefactos del proyecto
amends "elide:project.pkl"
import "elide:Jvm.pkl" as Jvm
artifacts {
["app"] = new Jvm.Jar {
name = "app"
options {
entrypoint = "com.example.Main"
}
}
}elide build escribe en .dev/artifacts/jar/<name>/. El JAR contiene las clases y los recursos de todos los
conjuntos de fuentes que no son de pruebas.
Jvm.Jar
| Propiedad | Significado | Valor predeterminado |
|---|---|---|
name | Nombre del archivo; "app" y "app.jar" dan ambos app.jar. | la clave del artefacto |
sources | Conjuntos de fuentes que se empaquetan; vacío significa todos los que no son de pruebas. | ninguno |
from | JAR de otros miembros del espacio de trabajo que se desempaquetan en este, cada uno compilado antes: from { project("x") }. Sus manifiestos se descartan; sus dependencias se suman al POM exportado y publicado de este proyecto. | ninguno |
resources | Archivos adicionales: rutas o new { from = …; into = … }. | ninguno |
manifest | Atributos adicionales de META-INF/MANIFEST.MF. | ninguno |
manifestFile | Archivo de manifiesto que se usa en lugar de uno generado. | — |
excludes | Entradas que se omiten: un patrón con / * ? [ ] es un glob de ruta; un nombre con puntos es un prefijo de paquete. | ninguno |
options.entrypoint | Main-Class. | jvm.main |
options.compress | Comprimir las entradas. | true |
options. | Añadir los atributos Implementation-*. | true |
main | No se lee al empaquetar; use options.entrypoint. | — |
dependsOn | Artefactos que se compilan antes. | ninguno |
artifacts {
["app"] = new Jvm.Jar {
sources { "main" }
excludes {
"com.example.internal" // a package and its subpackages
"**/*.proto" // a path glob
}
manifest {
["Implementation-Vendor"] = "Example"
}
resources {
"LICENSE.txt"
new { from = "config"; into = "META-INF/config" }
}
}
}JAR de fuentes y de Javadoc
artifacts {
["sources"] = new Jvm.SourceJar {
classifier = "sources"
excludes { "**/internal/**" }
}
["javadoc"] = new Jvm.JavadocJar {
windowTitle = "Example API"
links { "https://docs.oracle.com/en/java/javase/25/docs/api/" }
groups {
["Core"] { "com.example.core" }
}
}
}Jvm.SourceJar | Significado |
|---|---|
sources | Conjuntos de fuentes que se empaquetan; vacío significa todos los que no son de pruebas. |
classifier | Se inserta antes de la extensión (app-sources.jar). |
includes, excludes | Globs de ruta sobre las fuentes. |
Jvm.JavadocJar | Significado |
|---|---|
sources | Conjuntos de fuentes que se documentan; vacío significa todos los que no son de pruebas. |
groups | Grupos de paquetes: título y lista de paquetes. |
links | URL de documentación externa. |
excludes | Patrones que quedan sin documentar. |
windowTitle, docTitle | Títulos de la ventana y del documento. |
generator | "auto" (predeterminado): Dokka cuando las fuentes incluyen Kotlin, javadoc en otro caso. "javadoc" o "dokka" elige uno. |
Las fuentes que incluyen Kotlin se documentan con Dokka en lugar
de javadoc, que cubre también el código Java que las acompaña; generator = "javadoc" documenta solo los archivos
Java. Dokka se ejecuta como un proceso JVM aparte. Elide resuelve sus JAR desde Maven la primera vez que se compila un
JAR de Javadoc de Kotlin y los guarda en caché en el repositorio Maven local, así que esa primera compilación necesita
acceso a la red. En cada compilación, Dokka también descarga las listas de paquetes de sus enlaces al JDK, a la
biblioteca estándar y a links; --offline omite esas consultas. Dokka lee sources, links y excludes (un paquete
excluido y sus subpaquetes quedan fuera); groups y los títulos solo se aplican a javadoc, y Elide avisa cuando se
definen títulos para Dokka.
Distribuciones de aplicaciones ejecutables
Un Jvm.JvmApplication es un árbol ejecutable, como el plugin application de Gradle: los JAR de ejecución en
lib/, los scripts de inicio en bin/ y archivos comprimidos opcionales.
artifacts {
["dist"] = new Jvm.JvmApplication {
from { "app" }
entrypoint = "com.example.Main"
defaultJvmArgs { "-Xmx512m" }
contents {
new { from = "config"; into = "etc" }
}
options {
archives { "zip"; "tar" }
}
}
}| Propiedad | Significado | Valor predeterminado |
|---|---|---|
from | Artefactos JAR con el código de la aplicación; vacío significa todos los JAR declarados, o un JAR con las clases del proyecto. | ninguno |
name | Nombre del directorio y de los scripts de inicio. | la clave del artefacto |
entrypoint | Clase principal. | jvm.main |
defaultJvmArgs | Opciones de la JVM en los scripts, después de jvm.flags. | ninguno |
executableDir | Directorio de los scripts. | "bin" |
contents | Archivos adicionales en la raíz, con la misma forma que los recursos de un conjunto de fuentes. | ninguno |
options.unixStartScript, options. | Generar cada script. | true |
options.archives | "zip" y/o "tar" (gzip). | ninguno |
dependsOn | Artefactos que se compilan antes. | ninguno |
| Salida | Ruta |
|---|---|
| Árbol de instalación | . |
| Archivos comprimidos | . |
elide runinicia el árbol instalado con las opciones de la JVM de los scripts.- Los scripts también leen
JAVA_OPTSy<NAME>_OPTS(sample-app→SAMPLE_APP_OPTS). - El script POSIX sigue los enlaces simbólicos a sí mismo; en Windows, ejecute el script directamente o mediante
PATH. name,version(al generar archivos comprimidos) y cadaintodeben ser nombres de archivo válidos en todas las plataformas: sin/,\,:*?"<>|, caracteres de control, punto o espacio al final, ni nombres de dispositivo de Windows comoNUL. Los nombres no válidos hacen fallar la compilación antes de que escriba nada.
Los miembros de un espacio de trabajo usan el Jvm.Jar de un proyecto hermano con project("core"); consulte
Espacios de trabajo.