Zum Inhalt springen

JAR-Erstellung

Erstellen, listen und entpacken Sie JARs mit elide jar, und bauen Sie JARs, Quell- und Javadoc-JARs sowie ausführbare Anwendungsdistributionen in einem Elide-Projekt.

Auf dieser Seite

Elide erstellt und liest JAR-Dateien direkt mit elide jar und baut sie als Projektartefakte.

Erstellen, auflisten und entpacken

jar-Optionen folgen nach --:

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

Kompilieren und ein JAR erstellen

elide javac --jar target/app.jar -- src/Main.java src/Util.java
elide javac --jar target/app.jar --manifest src/MANIFEST.MF -- src/Main.java

Projektartefakte

amends "elide:project.pkl"
import "elide:Jvm.pkl" as Jvm

artifacts {
  ["app"] = new Jvm.Jar {
    name = "app"
    options {
      entrypoint = "com.example.Main"
    }
  }
}

elide build schreibt nach .dev/artifacts/jar/<name>/. Das JAR enthält die Klassen und Ressourcen aller Source-Sets, die keine Test-Sets sind.

Jvm.Jar

EigenschaftBedeutungStandard
nameDateiname; "app" und "app.jar" ergeben beide app.jar.der Artefaktschlüssel
sourcesZu paketierende Source-Sets; leer bedeutet alle außer Test-Sets.keine
fromJARs anderer Workspace-Mitglieder, die in dieses entpackt werden; jedes wird zuerst gebaut: from { project("x") }. Ihre Manifeste werden verworfen; ihre Abhängigkeiten kommen in das exportierte und veröffentlichte POM dieses Projekts.keine
resourcesZusätzliche Dateien: Pfade oder new { from = …; into = … }.keine
manifestZusätzliche Attribute für META-INF/MANIFEST.MF.keine
manifestFileManifest-Datei, die anstelle eines generierten Manifests verwendet wird.—
excludesAuszulassende Einträge: ein Muster mit / * ? [ ] ist ein Pfad-Glob, ein Name mit Punkten ein Paketpräfix.keine
options.entrypointMain-Class.jvm.main
options.compressEinträge komprimieren.true
options.defaultManifestPropertiesImplementation-*-Attribute hinzufügen.true
mainWird beim Paketieren nicht gelesen; verwenden Sie options.entrypoint.—
dependsOnArtefakte, die zuerst gebaut werden.keine
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" }
    }
  }
}

Quell- und Javadoc-JARs

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.SourceJarBedeutung
sourcesZu paketierende Source-Sets; leer bedeutet alle außer Test-Sets.
classifierWird vor der Dateiendung eingefügt (app-sources.jar).
includes, excludesPfad-Globs über die Quelldateien.
Jvm.JavadocJarBedeutung
sourcesZu dokumentierende Source-Sets; leer bedeutet alle außer Test-Sets.
groupsPaketgruppen: Titel und Paketliste.
linksURLs externer Dokumentation.
excludesMuster, die undokumentiert bleiben.
windowTitle, docTitleFenster- und Dokumenttitel.
generator"auto" (Standard): Dokka, wenn die Quellen Kotlin enthalten, sonst javadoc. "javadoc" oder "dokka" wählt eines fest aus.

Quellen mit Kotlin werden mit Dokka statt mit javadoc dokumentiert, einschließlich des Java-Codes daneben; generator = "javadoc" dokumentiert nur die Java-Dateien. Dokka läuft als separater JVM-Prozess. Elide löst seine JARs beim ersten Bau eines Kotlin-Javadoc-JARs aus Maven auf und speichert sie im lokalen Maven-Repository, daher braucht dieser erste Build Netzwerkzugriff. Bei jedem Build ruft Dokka außerdem die Paketlisten hinter seinen Links zum JDK, zur Standardbibliothek und zu links ab; --offline überspringt diese Abfragen. Dokka liest sources, links und excludes (ein ausgeschlossenes Paket und seine Unterpakete werden ausgelassen); groups und die Titel gelten nur für javadoc, und Elide warnt, wenn für Dokka Titel gesetzt sind.

Ausführbare Anwendungsdistributionen

Eine Jvm.JvmApplication ist ein ausführbarer Verzeichnisbaum wie beim application-Plugin von Gradle: Laufzeit-JARs in lib/, Startskripte in bin/ und optional Archive.

artifacts {
  ["dist"] = new Jvm.JvmApplication {
    from { "app" }
    entrypoint = "com.example.Main"
    defaultJvmArgs { "-Xmx512m" }
    contents {
      new { from = "config"; into = "etc" }
    }
    options {
      archives { "zip"; "tar" }
    }
  }
}
EigenschaftBedeutungStandard
fromJAR-Artefakte mit dem Code der Anwendung; leer bedeutet jedes deklarierte JAR oder ein JAR mit den Klassen des Projekts.keine
nameName des Verzeichnisses und der Startskripte.der Artefaktschlüssel
entrypointHauptklasse.jvm.main
defaultJvmArgsJVM-Optionen in den Skripten, nach jvm.flags.keine
executableDirVerzeichnis für die Skripte."bin"
contentsZusätzliche Dateien im Stammverzeichnis, in derselben Form wie Ressourcen eines Source-Sets.keine
options.unixStartScript, options.windowsStartScriptDas jeweilige Skript erzeugen.true
options.archives"zip" und/oder "tar" (gzip).keine
dependsOnArtefakte, die zuerst gebaut werden.keine
AusgabePfad
Installationsbaum.dev/artifacts/install/<name>/
Archive.dev/artifacts/distributions/
  • elide run startet den installierten Baum mit den JVM-Optionen der Skripte.
  • Die Skripte lesen außerdem JAVA_OPTS und <NAME>_OPTS (sample-app → SAMPLE_APP_OPTS).
  • Das POSIX-Skript folgt symbolischen Links auf sich selbst; unter Windows führen Sie das Skript direkt oder über PATH aus.
  • name, version (beim Archivieren) und jedes into müssen auf allen Plattformen gültige Dateinamen sein: kein /, \, :*?"<>|, keine Steuerzeichen, kein Punkt oder Leerzeichen am Ende und keine Windows-Gerätenamen wie NUL. Ungültige Namen lassen den Build fehlschlagen, bevor er etwas schreibt.

Workspace-Mitglieder verwenden das Jvm.Jar eines Geschwisterprojekts mit project("core"); siehe Workspaces.

War diese Seite hilfreich?