wake-up-neo.com

So kompilieren Sie ein Java-Programm mit der .jar-Bibliothek

Ich kann Javac nicht dazu bringen, eine externe .jar-Datei zu erkennen, deren Klassen ich erweitern möchte. Ich habe zwei Dateien in demselben Verzeichnis: TestConsole.Java und acm.jar. Ich kompiliere aus demselben Verzeichnis mit folgendem Befehl:

javac -classpath .:acm.jar TestConsole.Java

Aber es scheint, als würde Javac einfach acm.jar ignorieren. Es gibt mir den Fehler:

TestConsole.Java:1: package acm does not exist
import acm.program;
          ^

Acm.program ist natürlich ein Paket in acm.jar. Alle Klassen in acm.jar sind bereits kompiliert. Ich möchte sie nur in meinen Klassen verwenden, nicht kompilieren.

Was mache ich falsch?

Ich führe dies auf einem Mac aus und die Verzeichnisstruktur von acm.jar scheint gültig zu sein: Es enthält ein acm/program-Verzeichnis, das ConsoleProgram.class hat, die einzige Klasse, die TestConsole erweitert.

javac -classpath ".:acm.jar" TestConsole.Java funktioniert auch nicht.

15
Rebecca Nelson

Checkliste:

  1. ihre Klassen in acm.jar erscheinen als:

    acm/program/CLASSX.class

    acm/program/CLASSY.class

    wenn mit jar tf acm.jar dekantiert

  2. Sie importieren sie wie:

import acm.program.CLASSX;

oder

ACM-Programm importieren. *;

2
Andrew
javac -cp <jar you want to include>;<jar you want to include> <source.Java> 

<jar you want to include> Wenn sich in demselben Verzeichnis nur der Jar-Name befindet, werden vollständige oder relative Pfade angegeben

wenn mehr als eine Dose vorhanden ist, trennen Sie diese mit ,

ersetzen Sie ; durch : bei unix.

Wenn möglich, verwenden Sie IDE wie Eclipse. Früher habe ich viel Zeit mit ähnlichen Dingen verbracht, aber in der Industrie werden Sie dies auf diese Weise kaum tun.

22
Bhushan

Führen Sie diese Befehle auf einem Windows-Computer aus? Unter Windows werden die Elemente des Klassenpfads durch ein Semikolon und nicht durch einen Doppelpunkt getrennt. So:

javac -classpath .;acm.jar TestConsole.Java

Eine andere Möglichkeit: Die Struktur von acm.jar ist falsch. Es reicht nicht aus, dass die darin enthaltenen Klassendateien aus Dateien zusammengestellt wurden, die package acm.program deklarieren. Die Paketstruktur muss auch als Verzeichnishierarchie dargestellt werden. acm.jar muss ein Verzeichnis acm und darin ein Unterverzeichnis program enthalten, das die eigentlichen Klassendateien für die Klasse enthält in TestConsole verwendete Klassen.

6

Wer versucht zu kompilieren und immer noch das Problem zu haben, während ich stundenlang zu kämpfen hatte, ich habe die oben genannten Antworten verfolgt, konnte das Programm jedoch aufgrund eines kleineren Problems nicht ausführen.

Das Problem ist das Semikolon nach jeder Packung. Ich bin nicht sicher über Mac oder Linux, aber für Windows Eingabeaufforderung war dies der Fall

javac -cp mysql-connector-Java-8.0.12.jar; Testing.Java

Java -cp mysql-connector-Java-8.0.12.jar; Testing

Sollte beides zusammenstellen oder laufen.

0
Kirk