Wie erstelle ich eine JAR aus einer Java-Datei?

87

Ich habe ein einfaches Programm mit einer Java-Anwendung (keine Anwendung mit Projekten, sondern einer Anwendung innerhalb eines Projekts; .java ) mit einem einzelnen Frame geschrieben. Beide Dateien sind .java, daher kann ich kein Manifest schreiben , das von der JAR benötigt wird.

Die MyApp.java startet wie eine Klasse mit Paket, importiert dann die öffentliche Klasse MyAppund hat eine Hauptfunktion, aber es ist immer noch eine .java-Datei! Ich schreibe es in JDeveloper 11g, wenn es hilft.

Irgendwelche Ideen, wie man aus diesen Dateien eine JAR macht?

user1303007
quelle
1
Ich denke, dass dies viel einfacher erreicht werden kann, wenn Verpackungswerkzeuge wie ANT oder Maven
Churk am
Stimme Chuck zu. Schauen Sie sich ANT an. IDEs eignen sich hervorragend für die Entwicklung, aber Sie müssen verstehen, wie die Dinge funktionieren. Java-Dateien werden über Javac zu .class-Dateien kompiliert. Danach können .class-Dateien mit dem Befehl jar in ein jar gepackt werden. (Ant hat Aufgaben dafür, sogar jdeveloper hat einen Assistenten dafür).
BigMike
JDeveloper selbst sollte die Fähigkeit haben, JAR-Dateien zu erstellen. Eine schnelle Google-Suche bietet hier ein Howto: tompeez.wordpress.com/2011/06/01/…
stolzem
1
Können Sie Ihre Frage klären?
Romain Hippeau
Gehen Sie zum Quellverzeichnis und führen Sie den folgenden Befehl aus: - javac * .java && jar cvf JarName.jar * .class
grell

Antworten:

102

Öffnen Sie eine Eingabeaufforderung.

Wechseln Sie in das Verzeichnis, in dem Sie Ihre .java-Dateien haben

Erstellen Sie einen Verzeichnisaufbau

Führen Sie die Java-Kompilierung über die Befehlszeile aus

javac -d ./build *.java

Wenn keine Fehler vorliegen, sollten Sie im Build-Verzeichnis Ihren Klassenbaum haben

Wechseln Sie in das Build-Verzeichnis und führen Sie a

jar cvf YourJar.jar *

Zum Hinzufügen von Manifest-Check-JAR-Befehlszeilenschaltern

BigMike
quelle
Ich habe versucht, über die Befehlszeile zu kompilieren, erhalte jedoch eine Fehlermeldung: Frame1.java:23: Paket oracle.jdeveloper.layout existiert nicht Wie löse ich das? Entschuldigung für die Fragen der
Neulinge
Sie müssen den Klassenpfad erstellen, der auf alle Bibliotheken verweist, auf die Sie in Ihren Klassen verweisen. Wenden Sie sich an Ihre jdeveloper-Installation. Es sollte ein Ant-Build-Beispiel (build.xml-Datei) und mindestens ein paar gute Tutorials zur Verwendung von jDeveloper mit ANT auf der Oracle-Site geben.
BigMike
@ user1303007 mal hier vorbeischauen oracle.com/technetwork/articles/adf/part4-098813.html
BigMike
1
Ich habe meinem Befehl jar eine Option hinzugefügt, um die Hauptklasse automatisch zum Manifest hinzuzufügen ... jar cfe Main.jar Main *(Ich bin jedoch verwirrt, ich musste den Namen der
Hauptklasse
31

Einfach mit Kommandozeile:

javac MyApp.java
jar -cf myJar.jar MyApp.class

Sicher, IDEs vermeiden die Verwendung eines Befehlszeilenterminals

ab_dev86
quelle
11
Das obige hat funktioniert, aber ich musste das .classvon myApp angeben . So war esjar -cf myJar.jar myApp.class
Navigatron
3
Rechtschreibfehler auch hier, und es wird davon ausgegangen, dass es keine Paketanweisung gibt. Nicht ausreichend.
Marquis von Lorne
14

Ok, das ist die Lösung, die ich gerne gefunden hätte, stattdessen schreibe ich sie hier:

Erstellen Sie zuerst die Verzeichnisstruktur, die dem für die Java-Datei definierten Paket entspricht. Wenn es sich um my.super.application handelt, erstellen Sie das Verzeichnis "my" und darin "super" und darin die Java-Datei "App.java".

dann von der Kommandozeile:

   javac -cp /path/to/lib1.jar:/path/to/lib2.jar path/to/my/super/App.java

Beachten Sie, dass die oben genannten Dateien mehrere Bibliotheken enthalten, wenn Sie unter Windows "" verwenden, um mehrere Dateien zu trennen, andernfalls verwenden Sie unter GNU / Linux ":" So erstellen Sie eine JAR-Datei

   jar -cvfe App.jar App my/app/

Mit dem obigen Befehl wird die Anwendung mit dem entsprechenden Manifest erstellt, das die App als Hauptklasse angibt.

Das Einfügen der erforderlichen Bibliotheken in die JAR-Datei ist mit Java- oder JAR-Befehlszeilenparametern nicht möglich.

Sie können stattdessen:

  1. Extrahieren Sie Bibliotheken manuell in den Stammordner der JAR-Datei
  2. Verwenden Sie eine IDE wie Netbeans und fügen Sie eine Regel in den Post-JAR-Abschnitt von nbproject / build-impl.xml ein, um die Bibliotheken im JAR zu extrahieren. Siehe unten.
<target name="-post-jar">
        <!-- Empty placeholder for easier customization. -->
        <!-- You can override this target in the ../build.xml file. -->
  <jar jarfile="${dist.jar}" update="true">  
            <zipfileset src="${dist.jar}" includes="**/*.class" />  
            <zipfileset src="${file.reference.iText-1.0.8.jar}" includes="**/*"/>
      <zipfileset src="${file.reference.itextpdf-3.2.1.jar}" includes="**/*"/>
  </jar>
    </target>

Die file.reference-Namen befinden sich in der Datei project.properties, nachdem Sie die Bibliotheken zur Netbeans-IDE hinzugefügt haben.

sarah.ferguson
quelle
9

Oft möchten Sie ein Manifest wie folgt angeben:

jar -cvfm myJar.jar myManifest.txt myApp.class

Was lautet: "Erstellen Sie einen ausführlichen jarFilename manifestFilename", gefolgt von den Dateien, die Sie einschließen möchten. Ausführlich bedeutet, Nachrichten darüber zu drucken, was es tut.

Beachten Sie, dass der Name der von Ihnen angegebenen Manifestdatei beliebig sein kann, da jarsie automatisch umbenannt und in das richtige Verzeichnis in der JAR-Datei verschoben wird.

Evgeni Sergeev
quelle
6

Dies kann ohne Terminal direkt von der IDE aus erfolgen. Netbeans zum Beispiel.

  1. Erstellen Sie ein separates Projekt mit Paketen (Create Project - Java - Java Class Library).
  2. Platzieren Sie Ihre .java-Klassen dort.
  3. Erstellen Sie dieses Projekt.
  4. Gehen Sie zu Ihrem Projektordner und suchen Sie dort Build- und Dist-Ordner.
  5. Suchen Sie die JAR-Datei in Ihrem dist-Ordner.
  6. Holen Sie sich Ihr anderes Projekt und fügen Sie diese JAR-Datei zu den Projektbibliotheken hinzu.
  7. Sie können jetzt Klassen aus dieser Bibliothek und ihren Methoden direkt aus Code referenzieren, wenn der Import automatisch für Sie erfolgt.
Zon
quelle
3

Hier ist eine andere ausgefallene Möglichkeit, dies zu tun:

$ ls | grep .java | xargs -I {} javac {} ; jar -cf myJar.jar *.class

Dadurch werden alle .java-Dateien ( ls | grep .java) aus Ihrem aktuellen Verzeichnis abgerufen und in .class ( xargs -I {} javac {}) kompiliert. Anschließend wird die JAR-Datei aus den zuvor kompilierten Klassen ( jar -cf myJar.jar *.class) erstellt.

Matthieu vdBiggelaar
quelle
2

Der vielleicht anfängerfreundlichste Weg, eine JAR aus Ihrem Java-Code zu kompilieren, ist die Verwendung einer IDE (integrierte Entwicklungsumgebung; im Wesentlichen nur benutzerfreundliche Software für die Entwicklung) wie Netbeans oder Eclipse.

  • Installieren und Einrichten einer IDE. Hier ist die neueste Version von Eclipse .
  • Erstellen Sie ein Projekt in Ihrer IDE und legen Sie Ihre Java-Dateien im Projektordner ab.
  • Wählen Sie das Projekt in der IDE aus und exportieren Sie das Projekt als JAR. Stellen Sie sicher, dass beim Exportieren die entsprechenden Java-Dateien ausgewählt sind.

Sie können dies alles sehr einfach über die Befehlszeile tun. Stellen Sie sicher, dass Sie sich im selben Verzeichnis wie die Dateien befinden, auf die Sie abzielen, bevor Sie einen Befehl wie den folgenden ausführen:

javac YourApp.java
jar -cf YourJar.jar YourApp.class

... ändern Sie "YourApp" und "YourJar" in die richtigen Namen Ihrer Dateien.

Randall Arms Jr.
quelle