Comment inclure des fichiers jar avec un fichier java et compiler dans l'invite de commande

121

J'ai 3 fichiers jar et un fichier .java qui dépend de ces fichiers jar. Comment compiler le fichier .java avec ces fichiers jar à l'aide d'une invite de commande?

user1177567
la source
9
type "javac -help"
Sean Patrick Floyd
2
j'espère que cela vous aidera ..
Fahim Parkar
2
Remarque pour vous-même: vous devez utiliser l'indicateur -cp / -classpath avant le nom du fichier java que vous souhaitez exécuter, sinon il ignorera l'indicateur. java -cp ".;magic.jar" Fooest ok java Foo -cp ".;magic.jar"n'est pas.
Dmitry

Réponses:

108

Vous pouvez inclure vos fichiers jar dans la commande "javac" en utilisant l'option "-cp".

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

Au lieu de "-cp", vous pouvez également utiliser "-classpath"

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

Vous pouvez inclure les fichiers JAR à chaque compilation en définissant correctement la variable d'environnement "CLASSPATH". La variable d'environnement stockera le chemin où les fichiers jars et les classes qui doivent être utilisés pour compiler / exécuter n'importe quel fichier java. Vous n'aurez pas à inclure les fichiers JAR individuellement chaque fois que vous compilerez votre fichier.

Différentes machines ont différentes méthodes pour définir le chemin de classe comme variable d'environnement. Les commandes pour Windows, Linux, etc. sont différentes.

Vous pouvez trouver plus de détails dans ce blog .

http://javarevisited.blogspot.com/2011/01/how-classpath-work-in-java.html
Kensen John
la source
7
javac -classpath ".:/home/path/mail.jar;/home/path/servlet.jar" MyJavaFile.javatravaillé pour moi. J'utilisais mac. J'ai lu quelque part que «:» est utilisé pour unix.
Sri
2
J'ai utilisé cette commande mais lorsque j'essaye d'accéder à la classe présente dans le fichier jar, j'obtiens ClassNotFoundException.
Mohammed Rampurawala
3
que fait .:-on? désolé si c'est une question stupide, mais ce n'est pas évident pour moi.
Miranda
1
@kensen. Erreur de faute de frappe. remplacer: (deux-points) par un point-virgule (;)
Pankaj Shinde
Ci-dessus n'a pas fonctionné pour moi sur ubuntu. J'ai essayé sans guillemets et cela a fonctionné. Ex. javac -cp .:/home/path/mail.jar:/home/path/servlet.jar; MyJavaFile.java
Alfaz Jikani le
24

Veuillez essayer sous Linux

javac -cp jarfile source file 

EXEMPLE :-

javac  -cp .:/jars/* com/template/*.java
Jamsheer
la source
Quand j'essaye l' EXEMPLE: - , avec .:/jarsremplacé par le répertoire dans lequel mes fichiers JAR sont situés, j'obtiens le message d'erreur javac: invalid flag: /location/of/first/jar/file.jar.
Arturo don Juan
stackoverflow.com/questions/27915204/… veuillez vous référer à ceci, cela peut résoudre votre problème
Jamsheer
20

La syntaxe fonctionnera sur la commande Windows DOS:

javac -cp ".;first.jar;second.jar;third.jar" MyJavaFile.java
user2573056
la source
4
Après l'exécution réussie de la commande ci-dessus, comment exécuter le fichier de classe java?
Yash Agrawal
java -cp first.jar: second.jar: third.jar MyFile
Krsna Chaitanya
15

Essayez d'ajouter tous les fichiers jar de dépendance à votre chemin de classe via les paramètres de variable d'environnement ou suivez les étapes ci-dessous:

  1. Ouvrez l'invite de commande.
  2. Remplacez le répertoire par l'emplacement de votre fichier java que vous souhaitez compiler.
  3. Définissez le chemin de classe pour vos fichiers jar de dépendance comme indiqué ci-dessous:

    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. Maintenant, vous pouvez compiler votre fichier java. (commande: javac YourJavaFile.java)

J'espère que cela résoudra votre problème de dépendance.

Sarath Kumar Sivan
la source
15

Les étapes suivantes sont des étapes,

  1. Copiez tous les jars et votre fichier .java dans un même dossier (il sera facile de mentionner les noms de fichiers au lieu de mentionner un long chemin. Bien que vous puissiez conserver jar et .java dans des dossiers séparés).

  2. Compiler,

    javac -cp .:<file_1_name>.jar:<file_2_name>.jar <prog_name>.java
  3. Éxécuter,

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

J'espère que ça aide!

imbiber
la source
1
Merci d'avoir également montré comment exécuter. Que fait à nouveau le point deux points? C'est le répertoire courant et le séparateur de fichiers?
ThisClark
Oui, c'est le répertoire courant et un séparateur de fichiers Unix (sous Windows, c'est un point-virgule).
MathuSum Mut
6

Cela créera un fichier .class:

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

Cela exécutera le fichier de classe:

java -cp [jarname with specified path]: [java filename]
Isaq
la source
1
La commande java affiche une erreur Causée par: java.lang.ClassNotFoundException: org.slf4j.LoggerFactory Je veux compiler ** javac -classpath "/home/scorncer/Downloads/spark-core-2.3.jar" MyFile.javaet ** exécuter 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

Essaye ça.

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

Vous devez spécifier les dépendances au moment de la compilation ainsi qu'au moment de l'exécution

Pour compiler, utilisez ce format

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

Exemple:

javac -cp "ojdbc6.jar;c:\programs" Main.java
ArockiaRaj
la source
Cette réponse, bien que correcte, ne semble pas vraiment ajouter quoi que ce soit que les autres réponses ne disent pas déjà. S'il y a une différence essentielle entre cette réponse et les autres, il serait préférable d'expliquer pourquoi votre réponse diffère.
DaveyDaveDave
Vous avez mentionné la spécification des dépendances au moment de l'exécution ainsi que lors de la compilation, mais vous n'expliquez pas comment les spécifier au moment de l'exécution.
Michael Fulton
1

parfois, les modifications suivantes fonctionnent:

java -cp ".;%CLASSPATH%" classfilename 

Remarque: sous Windows. Pour Linux, utilisez $CLASSPATHplutôt.

Gourou
la source
1
javac -cp jars/jar1:jars/jar2:jars/jar3 abc.java
pratap
la source
5
Bien que ce code puisse résoudre la question, inclure une explication sur comment et pourquoi cela résout le problème aiderait vraiment à améliorer la qualité de votre publication et entraînerait probablement plus de votes à la hausse. N'oubliez pas que vous répondez à la question des lecteurs à l'avenir, pas seulement à la personne qui la pose maintenant. Veuillez modifier votre réponse pour ajouter des explications et donner une indication des limites et des hypothèses applicables.
double bip
0

Si vous utilisez Ubuntu:

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

Aller à l'emplacement du dossier (hors de la structure du package)

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

Remarque: veuillez consulter les emplacements des fichiers et les noms des packages

srihari
la source
-1

Pour les fenêtres

  1. connectez-vous au répertoire où les fichiers java sont présents sur l'invite de commande.
  2. définir le classpath (ici d = nom du dossier) set classpath = C: \ d1 \ d2 \ d3 \ d4 \ d5 \ d6 \ d7.jar;
  3. appuyez sur enter et
  4. compilez maintenant le fichier java javac filename.java
présage
la source