Elide crée et lit directement les fichiers JAR avec elide jar, et les construit comme artefacts de projet.
Créer, lister et extraire
Les options de jar se placent après -- :
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 -- -helpCompiler et créer 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.javaArtefacts de projet
amends "elide:project.pkl"
import "elide:Jvm.pkl" as Jvm
artifacts {
["app"] = new Jvm.Jar {
name = "app"
options {
entrypoint = "com.example.Main"
}
}
}elide build écrit dans .dev/artifacts/jar/<name>/. Le JAR contient les classes et ressources de chaque source set
qui n’est pas un source set de test.
Jvm.Jar
| Propriété | Signification | Valeur par défaut |
|---|---|---|
name | Nom du fichier ; "app" et "app.jar" donnent tous deux app.jar. | la clé de l’artefact |
sources | Source sets à empaqueter ; vide signifie tous ceux qui ne sont pas de test. | aucun |
from | JAR d’autres membres de l’espace de travail à décompresser dans celui-ci, chacun construit d’abord : from { project("x") }. Leurs manifestes sont ignorés ; leurs dépendances rejoignent le POM exporté et publié de ce projet. | aucun |
resources | Fichiers supplémentaires : chemins ou new { from = …; into = … }. | aucun |
manifest | Attributs supplémentaires de META-INF/MANIFEST.MF. | aucun |
manifestFile | Fichier manifeste à utiliser à la place d’un manifeste généré. | — |
excludes | Entrées à omettre : un motif contenant / * ? [ ] est un glob de chemin ; un nom pointé est un préfixe de paquet. | aucune |
options.entrypoint | Main-Class. | jvm.main |
options.compress | Compresser les entrées. | true |
options. | Ajouter les attributs Implementation-*. | true |
main | Non lu lors de l’empaquetage ; utilisez options.entrypoint. | — |
dependsOn | Artefacts à construire d’abord. | aucun |
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 sources et 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 | Signification |
|---|---|
sources | Source sets à empaqueter ; vide signifie tous ceux qui ne sont pas de test. |
classifier | Inséré avant l’extension (app-sources.jar). |
includes, excludes | Globs de chemin appliqués aux sources. |
Jvm.JavadocJar | Signification |
|---|---|
sources | Source sets à documenter ; vide signifie tous ceux qui ne sont pas de test. |
groups | Groupes de paquets : titre et liste de paquets. |
links | URL de documentation externe. |
excludes | Motifs à ne pas documenter. |
windowTitle, docTitle | Titres de la fenêtre et du document. |
generator | "auto" (par défaut) : Dokka quand les sources contiennent du Kotlin, javadoc sinon. "javadoc" ou "dokka" impose l’un des deux. |
Les sources qui contiennent du Kotlin sont documentées avec Dokka
au lieu de javadoc, y compris le code Java qui les accompagne ; generator = "javadoc" ne documente que les
fichiers Java. Dokka s’exécute dans un processus JVM distinct. Elide résout ses JAR depuis Maven la première fois
qu’un JAR Javadoc Kotlin est construit et les met en cache dans le dépôt Maven local : ce premier build nécessite donc
un accès réseau. À chaque build, Dokka récupère aussi les listes de paquets derrière ses liens vers le JDK, la
bibliothèque standard et links ; --offline saute ces requêtes. Dokka lit sources, links et excludes (un
paquet exclu et ses sous-paquets sont omis) ; groups et les titres ne s’appliquent qu’à javadoc, et Elide émet un
avertissement quand des titres sont définis pour Dokka.
Distributions d’applications exécutables
Un Jvm.JvmApplication est une arborescence exécutable, comme avec le plugin application de Gradle : les JAR
d’exécution dans lib/, les scripts de démarrage dans bin/ et des archives facultatives.
artifacts {
["dist"] = new Jvm.JvmApplication {
from { "app" }
entrypoint = "com.example.Main"
defaultJvmArgs { "-Xmx512m" }
contents {
new { from = "config"; into = "etc" }
}
options {
archives { "zip"; "tar" }
}
}
}| Propriété | Signification | Valeur par défaut |
|---|---|---|
from | Artefacts JAR contenant le code de l’application ; vide signifie tous les JAR déclarés, ou un JAR des classes du projet. | aucun |
name | Nom du répertoire et des scripts de démarrage. | la clé de l’artefact |
entrypoint | Classe principale. | jvm.main |
defaultJvmArgs | Options JVM dans les scripts, après jvm.flags. | aucune |
executableDir | Répertoire des scripts. | "bin" |
contents | Fichiers supplémentaires à la racine, sous la même forme que les ressources d’un source set. | aucun |
options.unixStartScript, options. | Générer chaque script. | true |
options.archives | "zip" et/ou "tar" (gzip). | aucune |
dependsOn | Artefacts à construire d’abord. | aucun |
| Sortie | Chemin |
|---|---|
| Arborescence d’installation | . |
| Archives | . |
elide runlance l’arborescence installée avec les options JVM des scripts.- Les scripts lisent aussi
JAVA_OPTSet<NAME>_OPTS(sample-app→SAMPLE_APP_OPTS). - Le script POSIX suit les liens symboliques qui pointent vers lui ; sous Windows, exécutez le script directement ou via
PATH. name,version(lors de l’archivage) et chaqueintodoivent être des noms de fichier valides sur toutes les plateformes : pas de/,\,:*?"<>|, de caractères de contrôle, de point ou d’espace final, ni de noms de périphérique Windows commeNUL. Un nom invalide fait échouer le build avant toute écriture.
Les membres d’un espace de travail utilisent le Jvm.Jar d’un projet voisin avec project("core") ; voir
Espaces de travail.