2009-02-02 6 views
46

Ich versuche ein ausführbares jar-Programm zu erstellen, das von extern heruntergeladenen jar abhängt. In meinem Projekt habe ich sie in den Build-Pfad aufgenommen und kann sie in Eclipse ausführen und debuggen.Eclipse: Wie man ein ausführbares Glas mit externem Glas baut?

Wenn ich versuchte, es in ein Jar zu exportieren, kann ich das Programm ausführen, aber ich kann 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 jars einzuschließen, aber es funktioniert nicht.

Ein Punkt zu beachten ist, dass ich kompilieren Warnungen beim Exportieren meiner ausführbaren Jar, aber es zeigt keine Beschreibung über die Warnungen.

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

+3

Tun Sie das nicht. Im Ernst, nie abhängig von Ihrer IDE, Build Artefakt zu erstellen, verwenden Sie Skripte (Maven, Ant) für diesen Zweck. – Marko

+0

Maven und Ant werden als Alternativen erwähnt. Ich könnte mehr obskure Build-Tools auflisten, aber diese beiden sind die Standard-Tools. Es macht keinen Sinn weiter zu arbeiten, da es bereits viele Informationen über sie gibt. – Marko

Antwort

14

Sie können diese für Ihre jar von writing a manifest tun. Werfen Sie einen Blick auf den Header Class-Path. Eclipse hat eine Option, um beim Export ein eigenes Manifest auszuwählen.

Die Alternative ist die Abhängigkeit zu dem Classpath zu dem Zeitpunkt, fügen Sie die Anwendung aufrufen:

win32: java.exe -cp app.jar;dependency.jar foo.MyMainClass 
*nix: java -cp app.jar:dependency.jar foo.MyMainClass 
+5

Der letztere Vorschlag wird nicht funktionieren. Das '-cp' (und '-Classpath') Argument ist ** ignoriert **, wenn' -jar' verwendet wird. – BalusC

+0

@BalusC - Sie sind richtig; die Abhängigkeit müsste im Manifest sein. Ich werde die Antwort bearbeiten. – McDowell

+0

@McDowell: Danke - ich kann das nie richtig machen. –

5

Als guter Praxis können Sie verwenden, um eine Ant Script (Eklipse mit ihm kommt) Ihre JAR-Datei zu erzeugen. In diesem JAR können Sie alle abhängigen Bibliotheken haben.

Sie können sogar den Header des Klassenpfads von MANIFEST so einstellen, dass er auf Dateien in Ihrem Dateisystem zeigt, aber das ist keine gute Übung.

Ant build.xml Skript Beispiel:

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

36

Eclipse 3.5 hat eine Option in den runnable jar benötigten Bibliotheken zu verpacken. Datei -> Exportieren ... Wählen Sie Runnable Glas und klicken Sie auf Weiter. Das ausführbare JAR-Exportfenster verfügt über eine Optionsschaltfläche, über die Sie die erforderlichen Bibliotheken in das JAR-Paket packen können.

+1

Scheint gut. Abgesehen von der Tatsache, dass ich eine Startkonfiguration haben muss. Das Erstellen einer Dummy-Startkonfiguration ist jedoch kein Problem. –

+6

Dies (kann) auch eine Ant-Build-Datei generieren, die später schnell gestartet werden kann (ob in IDE oder außerhalb der IDE). Das Beste aus beiden Welten! –

8

Wie die Gläser des Projektes in Ihren runnable jar enthalten:

ich Eclipse-Version bin mit: 3.7.2 auf Ubuntu 12.10 läuft. Ich werde Ihnen auch zeigen, wie man die build.xml macht, damit Sie die ant jar von der Befehlszeile aus tun und Ihr Glas mit anderen importierten Gläsern herstellen können, die in es extrahiert werden.

Im Grunde bitten Sie Eclipse, die Datei build.xml zu erstellen, die Ihre Bibliotheken in Ihr Glas für Sie importiert.

  1. Feuer auf Eclipse und ein neues Java-Projekt machen, stellen Sie ein neues Paket ‚mypackage‘, fügen Sie Ihre Hauptklasse: Runner diesen Code Setzen Sie dort.

    enter image description here

  2. Jetzt gehören die mysql-connector-java-5.1.28-bin.jarfrom Oracle, die uns ermöglicht, Java zu schreiben, um die MySQL-Datenbank zu verbinden. Klicke dazu mit der rechten Maustaste auf das Projekt -> Eigenschaften -> Java-Buildpfad -> Externes Glas hinzufügen -> Wähle mysql-connector-java-5.1.28-bin.jar.

  3. Führen Sie das Programm in Eclipse, es sollte ausgeführt werden, und sagen Sie, dass der Benutzername/das Passwort ungültig ist, was bedeutet, Eclipse ist ordnungsgemäß mit dem Jar konfiguriert. gehen

  4. In Eclipse File ->Export ->Java ->Runnable Jar File. Sie werden diesen Dialog:

    enter image description here

    Stellen Sie sicher, die 'speichern als Ant-Skript' Checkbox einzurichten. Das macht es so, dass Sie die Befehlszeile verwenden können, um später eine ant jar zu machen.

  5. zum Terminal gehen dann und sehen Sie die Ant-Skript:

    enter image description here

Sie sehen, also lief ich das Glas und es hat Fehler nicht aus, weil es die inbegriffen gefunden mysql-connector-java-5.1.28-bin.jar eingebettet in Hello.jar.

Ansehen Hello.jar: vi Hello.jar und finden Sie viele Verweise auf com/mysql/jdbc/stuff.class

zu tun ant jar auf der Kommandozeile sehen all dies automatisch zu tun: Umbenennen buildant.xml zu build.xml und den Zielnamen von create_run_jar zu jar ändern.

Dann geben Sie innerhalb MyProjectant jar und Boom ein. Sie haben Ihr Glas in MyProject. Und Sie können es mit java -jar Hello.jar aufrufen und alles funktioniert.