So fügen Sie JAR-Dateien in die Java-Datei ein und kompilieren sie in der Eingabeaufforderung

121

Ich habe 3 JAR-Dateien und eine Java-Datei, die von diesen JAR-Dateien abhängt. Wie kompiliere ich die Java-Datei mit diesen JAR-Dateien über eine Eingabeaufforderung?

user1177567
quelle
9
Typ "javac -help"
Sean Patrick Floyd
2
hoffe, das hilft dir ..
Fahim Parkar
2
Hinweis für sich selbst: Sie müssen das Flag -cp / -classpath vor dem Namen der Java-Datei verwenden, die Sie ausführen möchten. Andernfalls wird das Flag ignoriert. java -cp ".;magic.jar" Fooist ok java Foo -cp ".;magic.jar"ist nicht.
Dmitry

Antworten:

108

Sie können Ihre JAR-Dateien mit der Option "-cp" in den Befehl "javac" aufnehmen.

javac -cp ".:/home/path/mail.jar:/home/path/servlet.jar;" MyJavaFile.java

Anstelle von "-cp" können Sie auch "-classpath" verwenden.

javac -classpath ".:/home/path/mail.jar:/home/path/servlet.jar:" MyJavaFile.java

Sie können die Jars bei jeder Kompilierung einschließen, indem Sie die Umgebungsvariable "CLASSPATH" richtig einstellen. Die Umgebungsvariable speichert den Pfad, in dem sich die Jars und Klassen befinden, die zum Kompilieren / Ausführen einer Java-Datei verwendet werden müssen. Sie müssen die Gläser nicht jedes Mal einzeln einschließen, wenn Sie Ihre Datei kompilieren.

Verschiedene Maschinen haben unterschiedliche Methoden, um den Klassenpfad als Umgebungsvariable festzulegen. Die Befehle für Windows, Linux usw. sind unterschiedlich.

Weitere Details finden Sie in diesem Blog .

http://javarevisited.blogspot.com/2011/01/how-classpath-work-in-java.html
Kensen John
quelle
7
javac -classpath ".:/home/path/mail.jar;/home/path/servlet.jar" MyJavaFile.javaarbeitete für mich. Ich habe einen Mac benutzt. Ich habe irgendwo gelesen, dass ':' für Unix verwendet wird.
Sri
2
Ich habe diesen Befehl verwendet, aber beim Versuch, auf die in der JAR-Datei vorhandene Klasse zuzugreifen, wird ClassNotFoundException angezeigt.
Mohammed Rampurawala
3
was macht .:das Entschuldigung, wenn es eine dumme Frage ist, aber es ist mir nicht klar.
Miranda
1
@kensen. Schreibfehler. Ersetzen Sie: (Doppelpunkt) durch Semikolon (;)
Pankaj Shinde
Oben hat bei Ubuntu nicht funktioniert. Ich habe es ohne Anführungszeichen versucht und es hat funktioniert. Ex. javac -cp .:/home/path/mail.jar:/home/path/servlet.jar; MyJavaFile.java
Alfaz Jikani
24

Bitte versuchen Sie es unter Linux

javac -cp jarfile source file 

BEISPIEL: -

javac  -cp .:/jars/* com/template/*.java
Jamsheer
quelle
Wenn ich das BEISPIEL versuche : - , .:/jarsersetzt durch das Verzeichnis, in dem sich meine JAR-Dateien befinden, erhalte ich die Fehlermeldung javac: invalid flag: /location/of/first/jar/file.jar.
Arturo Don Juan
stackoverflow.com/questions/27915204/… Bitte beachten Sie dies, es kann Ihr Problem lösen
Jamsheer
20

Die Syntax funktioniert unter Windows dos:

javac -cp ".;first.jar;second.jar;third.jar" MyJavaFile.java
user2573056
quelle
4
Nach erfolgreicher Ausführung des obigen Befehls, wie wird die Java-Klassendatei ausgeführt?
Yash Agrawal
java -cp first.jar: second.jar: drittes.jar MyFile
Krsna Chaitanya
15

Versuchen Sie, alle Abhängigkeits-JAR-Dateien über Umgebungsvariableneinstellungen zu Ihrem Klassenpfad hinzuzufügen, oder führen Sie die folgenden Schritte aus:

  1. Öffnen Sie die Eingabeaufforderung.
  2. Wechseln Sie in das Verzeichnis Ihrer Java-Datei, die Sie kompilieren möchten.
  3. Legen Sie den Klassenpfad für Ihre Abhängigkeits-JAR-Dateien wie folgt fest:

    set classpath=C:\Users\sarath_sivan\Desktop\jars\servlet-api.jar; C:\Users\sarath_sivan\Desktop\jars\spring-jdbc-3.0.2.RELEASE; C:\Users\sarath_sivan\Desktop\jars\spring-aop-3.0.2.RELEASE;

  4. Jetzt können Sie Ihre Java-Datei kompilieren. (Befehl: javac YourJavaFile.java)

Hoffe, dies wird Ihr Abhängigkeitsproblem lösen.

Sarath Kumar Sivan
quelle
15

Das Folgende sind Schritte,

  1. Kopieren Sie alle Jars und Ihre .java-Datei in denselben Ordner (es ist einfach, Dateinamen zu erwähnen, anstatt einen langen Pfad zu erwähnen. Sie können jar und .java jedoch in separaten Ordnern aufbewahren).

  2. Kompilieren,

    javac -cp .:<file_1_name>.jar:<file_2_name>.jar <prog_name>.java
  3. Ausführen,

    java -cp .:<file_1_name>.jar:<file_2_name>.jar <prog_name>

Ich hoffe das hilft!

imbond
quelle
1
Vielen Dank, dass Sie auch gezeigt haben, wie man es ausführt. Was macht der Doppelpunkt wieder? Es ist das aktuelle Verzeichnis und Dateitrennzeichen?
ThisClark
Ja, es ist das aktuelle Verzeichnis und ein Unix-Dateitrennzeichen (unter Windows ist es ein Semikolon).
MathuSum Mut
6

Dadurch wird eine .class-Datei erstellt:

javac -classpath "[jarname with specified path]" [java filename]

Dadurch wird die Klassendatei ausgeführt:

java -cp [jarname with specified path]: [java filename]
Isaq
quelle
1
Java-Befehl zeigt Fehler an Verursacht durch: java.lang.ClassNotFoundException: org.slf4j.LoggerFactory Ich möchte ** kompilieren ** javac -classpath "/home/scorncer/Downloads/spark-core-2.3.jar" MyFile.javaund ** ausführen java -cp /home/scorncer/Downloads/spark-core-2.3.jar: MyFile.java also i tried java -cp /home/scorncer/Downloads/spark-core-2.3.jar: MyFile
Yash Agrawal
5

Versuche dies.

javac -cp .:jars/jar1:jars/jar2:jars/jar3 com/source/*.java
Shravya
quelle
2

Sie müssen die Abhängigkeiten sowohl in der Kompilierungszeit als auch in der Laufzeit angeben

Verwenden Sie zum Kompilieren dieses Format

javac -cp "*.jar;classfile_path" filename.java

Beispiel:

javac -cp "ojdbc6.jar;c:\programs" Main.java
ArockiaRaj
quelle
Diese Antwort ist zwar richtig, scheint aber nichts hinzuzufügen, was die anderen Antworten noch nicht sagen. Wenn es einen wesentlichen Unterschied zwischen dieser und den anderen Antworten gibt, ist es besser zu erklären, warum Ihre Antwort unterschiedlich ist.
DaveyDaveDave
Sie haben die Angabe von Abhängigkeiten zur Laufzeit sowie zur Kompilierungszeit erwähnt, aber nicht erklärt, wie diese zur Laufzeit angegeben werden.
Michael Fulton
1

Manchmal funktioniert es, wenn folgende Änderungen vorgenommen werden:

java -cp ".;%CLASSPATH%" classfilename 

Hinweis: Unter Windows. Für Linux $CLASSPATHstattdessen verwenden.

Guru
quelle
1
javac -cp jars/jar1:jars/jar2:jars/jar3 abc.java
Pratap
quelle
5
Während dieser Code die Frage lösen kann, einschließlich einer Erklärung, wie und warum dies das Problem löst, würde dies wirklich dazu beitragen, die Qualität Ihres Beitrags zu verbessern, und wahrscheinlich zu mehr Up-Votes führen. Denken Sie daran, dass Sie in Zukunft die Frage für die Leser beantworten, nicht nur für die Person, die jetzt fragt. Bitte bearbeiten Sie Ihre Antwort, um Erklärungen hinzuzufügen und anzugeben, welche Einschränkungen und Annahmen gelten.
Doppelter Piepton
0

Wenn Sie Ubuntu verwenden:

/opt/JavaServices/sqlite $ export CLASSPATH=/opt/JarFiles/XXXX.jar:/opt/JarFiles/XXXX.jar:/opt/JavaServices/;javac SQLiteSample.java

Gehe zum Ordner (außerhalb der Paketstruktur)

/opt/JavaServices $ export CLASSPATH=/opt/JarFiles/XXXXX.jar:/opt/JarFiles/XXXXX.jar:/opt/JavaServices/;java sqlite.SQLiteSample

Hinweis: Bitte beachten Sie die Dateispeicherorte und Paketnamen

Srihari
quelle
-1

Für Windows

  1. Stellen Sie an der Eingabeaufforderung eine Verbindung zu dem Verzeichnis her, in dem sich die Java-Dateien befinden.
  2. setze den Klassenpfad (hier d = Ordnername) setze Klassenpfad = C: \ d1 \ d2 \ d3 \ d4 \ d5 \ d6 \ d7.jar;
  3. Drücken Sie die Eingabetaste und
  4. Kompilieren Sie jetzt die Java-Datei javac filename.java
Vorbote
quelle