webentwicklung-frage-antwort-db.com.de

Eclipse: Wie erstelle ich eine ausführbare JAR-Datei mit einer externen JAR-Datei?

Ich versuche, ein ausführbares JAR-Programm zu erstellen, das von der heruntergeladenen externen JAR-Datei abhängt. In meinem Projekt habe ich sie in den Erstellungspfad aufgenommen und kann in Eclipse ausgeführt und debuggt werden.

Wenn ich versucht habe, es in ein Jar zu exportieren, kann ich das Programm ausführen, aber nicht, wenn ich versuche, eine Taste zu drücken, die Funktionsaufrufe und Klassen aus dem externen Jar enthält. Ich habe die Umgebungsvariablen (Windows XP) CLASSPATH bearbeitet, um die Pfade aller externen JAR-Dateien einzuschließen, aber es funktioniert nicht.

Beachten Sie, dass ich beim Exportieren meiner ausführbaren JAR-Datei Kompilierungswarnungen erhalten habe, aber keine Beschreibung der Warnungen angezeigt wird.

Würde jemand freundlicherweise eine gründliche Anleitung zur Einbindung eines externen JAR-Programms in Eclipse geben?

47
Ben

Eclipse 3.5 bietet die Option, erforderliche Bibliotheken in das ausführbare Jar zu packen. Datei -> Exportieren ... Wählen Sie ausführbares Glas und klicken Sie auf Weiter. Das ausführbare JAR-Exportfenster verfügt über ein Optionsfeld, über das Sie die erforderlichen Bibliotheken in das JAR packen können.

36
Bob Tefft

Sie können dies tun, indem Sie ein Manifest schreiben für Ihr Glas . Schauen Sie sich den Class-Path Header an. Eclipse bietet eine Option zum Auswählen eines eigenen Manifests beim Export.

Die Alternative besteht darin, die Abhängigkeit zum Zeitpunkt des Aufrufs der Anwendung zum Klassenpfad hinzuzufügen:

win32: Java.exe -cp app.jar;dependency.jar foo.MyMainClass
*nix:  Java -cp app.jar:dependency.jar foo.MyMainClass
14
McDowell

So fügen Sie die Gläser Ihres Projekts in Ihr lauffähiges Glas ein:

Ich verwende Eclipse Version: 3.7.2 unter Ubuntu 12.10. Ich zeige Ihnen auch, wie Sie den build.xml Erstellen, damit Sie den ant jar Über die Befehlszeile ausführen und Ihr Glas mit anderen importierten Gläsern erstellen können, die darin extrahiert wurden.

Grundsätzlich bitten Sie Eclipse, die build.xml zu erstellen, die Ihre Bibliotheken für Sie in Ihr jar importiert.

  1. Starten Sie Eclipse und erstellen Sie ein neues Java Projekt, erstellen Sie ein neues Paket 'mypackage', fügen Sie Ihre Hauptklasse hinzu: Runner Fügen Sie diesen Code dort ein.

    enter image description here

  2. Fügen Sie nun den mysql-connector-Java-5.1.28-bin.jarvon Oracle ein, mit dem Sie Java zum Herstellen einer Verbindung zur MySQL-Datenbank schreiben können. Klicken Sie dazu mit der rechten Maustaste auf das Projekt -> Eigenschaften -> Java build path -> Externes Jar hinzufügen -> wähle mysql-connector-Java-5.1.28-bin.jar.

  3. Führen Sie das Programm in Eclipse aus. Es sollte ausgeführt werden und Ihnen mitteilen, dass der Benutzername/das Kennwort ungültig ist. Dies bedeutet, dass Eclipse ordnungsgemäß mit der JAR-Datei konfiguriert ist.

  4. Gehen Sie in Eclipse zu File -> Export -> Java -> Runnable Jar File. Sie sehen diesen Dialog:

    enter image description here

    Stellen Sie sicher, dass das Kontrollkästchen "Als Ant-Skript speichern" aktiviert ist. Aus diesem Grund können Sie später über die Befehlszeile einen ant jar Ausführen.

  5. Gehen Sie dann zum Terminal und sehen Sie sich das Ameisenskript an:

    enter image description here

Sie sehen, ich habe das Jar ausgeführt und es ist kein Fehler aufgetreten, weil es das in mysql-connector-Java-5.1.28-bin.jar Eingebettete Hello.jar Gefunden hat.

Schauen Sie in Hello.jar nach: vi Hello.jar Und Sie werden viele Verweise auf com/mysql/jdbc/stuff.class Sehen

So führen Sie ant jar In der Befehlszeile aus, um dies alles automatisch auszuführen: Benennen Sie buildant.xml In build.xml Um und ändern Sie den Zielnamen von create_run_jar In jar.

Dann geben Sie in MyProjectant jar Ein und boom. Sie haben Ihr Glas in MyProject. Und Sie können es mit Java -jar Hello.jar Aufrufen und alles funktioniert.

8
Eric Leschinski

Als bewährte Methode können Sie ein Ant-Skript (Eclipse wird mitgeliefert) verwenden, um Ihre JAR-Datei zu generieren. In dieser JAR können Sie alle abhängigen Bibliotheken haben.

Sie können sogar den Klassenpfad-Header des MANIFEST so einstellen, dass er auf Dateien in Ihrem Dateisystem verweist. Dies ist jedoch keine gute Vorgehensweise.

Beispiel für ein Ant-Skript "build.xml":

<project name="jar with libs" default="compile and build" basedir=".">
<!-- this is used at compile time -->
<path id="example-classpath">
    <pathelement location="${root-dir}" />
    <fileset dir="D:/LIC/xalan-j_2_7_1" includes="*.jar" />
</path>

<target name="compile and build">
    <!-- deletes previously created jar -->
    <delete file="test.jar" />

    <!-- compile your code and drop .class into "bin" directory -->
    <javac srcdir="${basedir}" destdir="bin" debug="true" deprecation="on">
        <!-- this is telling the compiler where are the dependencies -->
        <classpath refid="example-classpath" />
    </javac>

    <!-- copy the JARs that you need to "bin" directory  -->
    <copy todir="bin">
        <fileset dir="D:/LIC/xalan-j_2_7_1" includes="*.jar" />
    </copy>

    <!-- creates your jar with the contents inside "bin" (now with your .class and .jar dependencies) -->
    <jar destfile="test.jar" basedir="bin" duplicate="preserve">
        <manifest>
            <!-- Who is building this jar? -->
            <attribute name="Built-By" value="${user.name}" />
            <!-- Information about the program itself -->
            <attribute name="Implementation-Vendor" value="ACME inc." />
            <attribute name="Implementation-Title" value="GreatProduct" />
            <attribute name="Implementation-Version" value="1.0.0beta2" />
            <!-- this tells which class should run when executing your jar -->
            <attribute name="Main-class" value="ApplyXPath" />
        </manifest>
    </jar>
</target>
5
Lucas Pottersky

Probieren Sie die Fat-Jar-Erweiterung. Es wird alle externen Gläser im Glas enthalten.

2
Marius
0
Moro