Suche…


Einführung

Es gibt eine Vielzahl von Technologien zum "Packen" von Java-Anwendungen, Webanwendungen usw. zur Bereitstellung auf der Plattform, auf der sie ausgeführt werden. Sie reichen von einfachen Bibliotheken oder ausführbaren JAR Dateien, WAR und EAR Dateien bis zu Installationsprogrammen und eigenständigen ausführbaren Dateien.

Bemerkungen

Grundsätzlich kann ein Java-Programm durch Kopieren einer kompilierten Klasse (z. B. einer ".class" -Datei) oder einer Verzeichnisstruktur mit kompilierten Klassen implementiert werden. Java wird jedoch normalerweise auf eine der folgenden Arten bereitgestellt:

  • Durch Kopieren einer JAR-Datei oder Sammlung von JAR-Dateien in das System, auf dem sie ausgeführt werden; zB mit javac .

  • Durch Kopieren oder Hochladen einer WAR-, EAR- oder ähnlichen Datei in einen "Servlet-Container" oder "Anwendungsserver".

  • Durch Ausführen eines Anwendungsinstallationsprogramms, das das obige automatisiert. Das Installationsprogramm installiert möglicherweise auch eine eingebettete JRE.

  • Legen Sie die JAR-Dateien für die Anwendung auf einem Webserver ab, damit sie mit Java WebStart gestartet werden können.

Das Beispiel zum Erstellen von JAR-, WAR- und EAR-Dateien fasst die verschiedenen Möglichkeiten zum Erstellen dieser Dateien zusammen.

Es gibt zahlreiche Open-Source- und kommerzielle Tools für "Installer-Generator" und "EXE-Generator" für Java. Ebenso gibt es Tools zum Verschleiern von Java-Klassendateien (um das Reverse Engineering schwieriger zu machen) und zum Hinzufügen von Laufzeitlizenzen. Dies ist alles außerhalb der Dokumentation für "Java Programming Language".

Erstellen einer ausführbaren JAR-Datei über die Befehlszeile

Um ein Glas zu machen, benötigen Sie eine oder mehrere Klassendateien. Dies sollte eine Hauptmethode haben, wenn es mit einem Doppelklick ausgeführt werden soll.

Für dieses Beispiel verwenden wir:

import javax.swing.*;
import java.awt.Container;

public class HelloWorld {

    public static void main(String[] args) {
        JFrame f = new JFrame("Hello, World"); 
        JLabel label = new JLabel("Hello, World");
        Container cont = f.getContentPane();
        cont.add(label);
        f.setSize(400,100); 
        f.setVisible(true);
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }

}

Es wurde HelloWorld.java genannt

Als nächstes wollen wir dieses Programm kompilieren.

Sie können jedes Programm verwenden, das Sie dazu möchten. Informationen zum Ausführen über die Befehlszeile finden Sie in der Dokumentation zum Kompilieren und Ausführen Ihres ersten Java-Programms.

Sobald Sie HelloWorld.class haben, erstellen Sie einen neuen Ordner und rufen Sie ihn an, wie Sie möchten.

Erstellen Sie eine weitere Datei namens manifest.txt und fügen Sie sie ein

Main-Class: HelloWorld
Class-Path: HelloWorld.jar

Legen Sie es mit HelloWorld.class in demselben Ordner ab
Verwenden Sie die Befehlszeile, um Ihr aktuelles Verzeichnis ( cd C:\Your\Folder\Path\Here unter Windows) zu Ihrem Ordner zu machen.

Verwenden Sie Terminal und wechseln Sie in das Verzeichnis ( cd /Users/user/Documents/Java/jarfolder auf Mac) Ihres Ordners

Wenn dies abgeschlossen ist, geben Sie jar -cvfm HelloWorld.jar manifest.txt HelloWorld.class und drücken Sie die Eingabetaste. Dadurch wird eine JAR-Datei (im Ordner mit Ihrem Manifest und HelloWorld.class) erstellt. Dabei werden die angegebenen .class-Dateien mit dem Namen HelloWorld.jar verwendet. Informationen zu den Optionen (wie -m und -v) finden Sie im Abschnitt Syntax.
Wechseln Sie nach diesen Schritten in Ihr Verzeichnis mit der Manifestdatei, und Sie sollten HelloWorld.jar finden
Wenn Sie darauf klicken, sollte Hello, World in einem Textfeld angezeigt werden.

Erstellen von JAR-, WAR- und EAR-Dateien

Die Dateitypen JAR, WAR und EAR sind im Wesentlichen ZIP-Dateien mit einer "Manifest" -Datei und (für WAR- und EAR-Dateien) eine bestimmte interne Verzeichnis- / Dateistruktur.

Die empfohlene Methode zum Erstellen dieser Dateien ist die Verwendung eines Java-spezifischen Build-Tools, das die Anforderungen für die jeweiligen Dateitypen "versteht". Wenn Sie kein Build-Tool verwenden, ist die IDE-Option "Export" die nächste Option.

( Anmerkung der Redaktion: Die Beschreibungen zum Erstellen dieser Dateien finden Sie am besten in der Dokumentation der jeweiligen Werkzeuge. Fügen Sie sie dort ein. Bitte zeigen Sie etwas Selbstbeherrschung und KEINEN Schuhhorn in diesem Beispiel! )

Erstellen von JAR- und WAR-Dateien mit Maven

Beim Erstellen eines JAR oder WAR mit Maven müssen Sie nur das richtige <packaging> -Element in die POM-Datei einfügen. z.B,

<packaging>jar</packaging>

oder

<packaging>war</packaging>

Für mehr Details. Maven kann so konfiguriert werden, dass "ausführbare" JAR-Dateien erstellt werden, indem die erforderlichen Informationen zur Einstiegspunktklasse und zu externen Abhängigkeiten als Plugin-Eigenschaften für das Maven-Jar-Plugin hinzugefügt werden. Es gibt sogar ein Plugin zum Erstellen von "uberJAR" -Dateien, die eine Anwendung und ihre Abhängigkeiten in einer einzigen JAR-Datei kombinieren.

Weitere Informationen finden Sie in der Maven-Dokumentation ( http://www.riptutorial.com/topic/898 ).

Erstellen von JAR-, WAR- und EAR-Dateien mit Ant

Das Ant-Build-Tool hat separate "Aufgaben" zum Erstellen von JAR, WAR und EAR. Weitere Informationen finden Sie in der Ant-Dokumentation ( http://www.riptutorial.com/topic/4223 ).

Erstellen von JAR-, WAR- und EAR-Dateien mithilfe einer IDE

Die drei beliebtesten Java-IDEs verfügen alle über eine integrierte Unterstützung für die Erstellung von Implementierungsdateien. Die Funktionalität wird oft als "Exportieren" bezeichnet.

Erstellen von JAR-, WAR- und EAR-Dateien mit dem Befehl jar .

Es ist auch möglich, diese Dateien mit dem Befehl jar "von Hand" zu erstellen. Es muss lediglich ein Dateibaum mit den richtigen Komponentendateien an der richtigen Stelle zusammengefügt werden, eine Manifestdatei erstellt und jar , um die JAR-Datei zu erstellen.

Weitere Informationen finden Sie im jar Befehlsthema ( JAR-Dateien erstellen und ändern )

Einführung in Java Web Start

Die Oracle Java-Tutorials fassen Web Start wie folgt zusammen:

Die Java Web Start-Software ermöglicht das Starten von Anwendungen mit vollem Funktionsumfang mit einem einzigen Klick. Benutzer können Anwendungen herunterladen und starten, z. B. ein komplettes Tabellenkalkulationsprogramm oder einen Internet-Chat-Client, ohne lange Installationsvorgänge durchzuführen.

Weitere Vorteile von Java Web Start sind Unterstützung für signierten Code und explizite Deklaration von Plattformabhängigkeiten sowie Unterstützung für die Zwischenspeicherung von Code und die Bereitstellung von Anwendungsupdates.

Java Web Start wird auch als JavaWS und JAWS bezeichnet. Die wichtigsten Informationsquellen sind:

Voraussetzungen

Auf hoher Ebene verteilt Web Start Java-Anwendungen, die als JAR-Dateien gepackt sind, von einem Remote-Webserver aus. Die Voraussetzungen sind:

  • Eine bereits vorhandene Java-Installation (JRE oder JDK) auf dem Zielcomputer, auf dem die Anwendung ausgeführt werden soll. Java 1.2.2 oder höher ist erforderlich:

    • Ab Java 5.0 ist die Web Start-Unterstützung im JRE / JDK enthalten.
    • Bei früheren Versionen wird die Web Start-Unterstützung separat installiert.
    • Die Web Start-Infrastruktur enthält Javascript, das auf einer Webseite enthalten sein kann, um den Benutzer bei der Installation der erforderlichen Software zu unterstützen.
  • Der Webserver, der die Software hostet, muss für den Zielcomputer zugänglich sein.

  • Wenn der Benutzer eine Web Start-Anwendung mit einem Link auf einer Webseite startet, gilt Folgendes:

    • Sie benötigen einen kompatiblen Webbrowser und
    • Für moderne (sichere) Browser müssen sie wissen, wie sie dem Browser mitteilen sollen, dass Java ausgeführt werden soll, ohne die Sicherheit des Webbrowsers zu beeinträchtigen.

Eine Beispiel-JNLP-Datei

Das folgende Beispiel soll die grundlegende Funktionalität von JNLP veranschaulichen.

<?xml version="1.0" encoding="UTF-8"?>
<jnlp spec="1.0+" codebase="https://www.example.com/demo" 
    href="demo_webstart.jnlp">
    <information>
        <title>Demo</title>
        <vendor>The Example.com Team</vendor>
    </information>
    <resources>
        <!-- Application Resources -->
        <j2se version="1.7+" href="http://java.sun.com/products/autodl/j2se"/>
        <jar href="Demo.jar" main="true"/>
    </resources>
    <application-desc
         name="Demo Application"
         main-class="com.example.jwsdemo.Main"
         width="300"
         height="300">
     </application-desc>
     <update check="background"/>
</jnlp>    

Wie Sie sehen, ist eine JNLP-Datei XML-basiert, und die Informationen sind alle im <jnlp> -Element enthalten.

  • Das spec Attribut gibt die Version der JNPL-Spezifikation an, mit der diese Datei übereinstimmt.
  • Das codebase Attribut gibt die Basis-URL zum Auflösen relativer href URLs im Rest der Datei an.
  • Das href Attribut gibt die endgültige URL für diese JNLP-Datei an.
  • Das Element <information> enthält Metadaten der Anwendung einschließlich Titel, Autoren, Beschreibung und Hilfeseite.
  • Das <resources> -Element beschreibt die Abhängigkeiten für die Anwendung, einschließlich der erforderlichen Java-Version, Betriebssystemplattform und JAR-Dateien.
  • Das Element <application-desc> (oder <applet-desc> ) enthält Informationen, die zum Starten der Anwendung erforderlich sind.

Webserver einrichten

Der Webserver muss so konfiguriert sein, dass application/x-java-jnlp-file als MIME-Typ für .jnlp Dateien verwendet wird.

Die JNLP-Datei und die JAR-Dateien der Anwendung müssen auf dem Webserver installiert sein, damit sie unter Verwendung der in der JNLP-Datei angegebenen URLs verfügbar sind.

Aktivieren des Starts über eine Webseite

Wenn die Anwendung über einen Weblink gestartet werden soll, muss die Seite, die den Link enthält, auf dem Webserver erstellt werden.

  • Wenn Sie davon ausgehen können, dass Java Web Start bereits auf dem Computer des Benutzers installiert ist, muss die Webseite lediglich einen Link zum Starten der Anwendung enthalten. Zum Beispiel.

    <a href="https://www.example.com/demo_webstart.jnlp">Launch the application</a>
    
  • Andernfalls sollte die Seite auch Skripts enthalten, um die Art des von dem Benutzer verwendeten Browsers zu ermitteln und die erforderliche Version von Java herunterzuladen und zu installieren.

HINWEIS: Es ist keine gute Idee, Benutzer zu ermutigen, Java auf diese Weise zu installieren, oder sogar Java in ihren Webbrowsern zu aktivieren, damit der Start von JNLP-Webseiten funktioniert.

Starten Sie Web Start-Anwendungen über die Befehlszeile

Die Anweisungen zum Starten einer Web Start-Anwendung über die Befehlszeile sind einfach. Wenn der Benutzer eine Java 5.0-JRE oder ein JDK installiert hat, müssen Sie einfach Folgendes ausführen:

$ javaws <url>

Dabei ist <url> die URL für die JNLP-Datei auf dem Remote-Server.

Erstellen eines UberJAR für eine Anwendung und ihre Abhängigkeiten

Eine allgemeine Anforderung an eine Java-Anwendung ist, dass sie durch Kopieren einer einzelnen Datei implementiert werden kann. Für einfache Anwendungen, die nur von den Standard-Java SE-Klassenbibliotheken abhängig sind, wird diese Anforderung erfüllt, indem eine JAR-Datei erstellt wird, die alle (kompilierten) Anwendungsklassen enthält.

Die Dinge sind nicht so einfach, wenn die Anwendung von Bibliotheken von Drittanbietern abhängt. Wenn Sie einfach Abhängigkeits-JAR-Dateien in eine Anwendungs-JAR einfügen, kann der Standard-Java-Klassenlader die Bibliotheksklassen nicht finden und Ihre Anwendung wird nicht gestartet. Stattdessen müssen Sie eine einzelne JAR-Datei erstellen, die die Anwendungsklassen und zugehörigen Ressourcen zusammen mit den Abhängigkeitsklassen und -ressourcen enthält. Diese müssen als einzelner Namespace organisiert werden, damit der Classloader durchsucht werden kann.

Eine solche JAR-Datei wird häufig als UberJAR bezeichnet.

Erstellen eines UberJAR mit dem Befehl "jar"

Das Verfahren zum Erstellen eines UberJAR ist unkompliziert. (Ich werde zur Vereinfachung Linux-Befehle verwenden. Die Befehle sollten für Mac OS und für Windows ähnlich sein.)

  1. Erstellen Sie ein temporäres Verzeichnis und wechseln Sie in das Verzeichnis.

    $ mkdir tempDir
    $ cd tempDir
    
  2. Verwenden Sie für jede abhängige JAR-Datei in der umgekehrten Reihenfolge , in der sie im Klassenpfad der Anwendung angezeigt werden müssen, den jar Befehl, um die JAR-Datei in das temporäre Verzeichnis zu entpacken.

    $ jar -xf <path/to/file.jar>
    

    Dadurch für mehrere JAR - Dateien werden Inhalte der JAR - Dateien überlagern.

  3. Kopieren Sie die Anwendungsklassen aus der Build-Struktur in das temporäre Verzeichnis

    $ cp -r path/to/classes .
    
  4. Erstellen Sie den UberJAR aus dem Inhalt des temporären Verzeichnisses:

    $ jar -cf ../myApplication.jar
    

    Wenn Sie eine ausführbare JAR-Datei erstellen, fügen Sie wie hier beschrieben ein entsprechendes MANIFEST.MF hinzu.

Erstellen eines UberJAR mit Maven

Wenn Ihr Projekt mit Maven erstellt wurde, können Sie mit den Plugins "maven-assembly" oder "maven-shade" ein UberJAR erstellen. Weitere Informationen finden Sie im Thema Maven Assembly (in der Maven- Dokumentation).

Die Vor- und Nachteile von UberJARs

Einige Vorteile von UberJARs sind selbstverständlich:

  • Ein UberJAR ist leicht zu verteilen.
  • Sie können die Bibliotheksabhängigkeiten für eine UberJAR nicht aufheben, da die Bibliotheken eigenständig sind.

Wenn Sie zum Erstellen des UberJAR ein geeignetes Werkzeug verwenden, haben Sie außerdem die Möglichkeit, nicht verwendete Bibliotheksklassen aus der JAR-Datei auszuschließen. Dies geschieht jedoch normalerweise durch statische Analyse der Klassen. Wenn in Ihrer Anwendung Reflexions-, Anmerkungsverarbeitung und ähnliche Techniken verwendet werden, müssen Sie darauf achten, dass Klassen nicht falsch ausgeschlossen werden.

UberJARs haben auch einige Nachteile:

  • Wenn Sie viele UberJARs mit den gleichen Abhängigkeiten haben, enthält jeder eine Kopie der Abhängigkeiten.
  • Einige Open - Source - Bibliotheken haben Lizenzen , die 1 ihre Verwendung in einem UberJAR ausschließen kann.

1 - Bei einigen Open-Source-Bibliothekslizenzen können Sie die Bibliothek nur verwenden, wenn der Endbenutzer eine Version der Bibliothek durch eine andere ersetzen kann. UberJARs können das Ersetzen von Versionsabhängigkeiten erschweren.



Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow