web-dev-qa-db-fra.com

Comment joker inclure des fichiers JAR lors de la compilation?

J'ai ce qui suit dans un fichier Java (MyRtmpClient.Java):

import org.Apache.mina.common.ByteBuffer;

et ByteBuffer est à l'intérieur d'un fichier JAR (avec la structure de répertoire appropriée bien sûr). Ce fichier jar et les autres dont j'ai besoin se trouvent dans le même répertoire que le fichier .Java.

Ensuite, je compile avec la ligne:

javac -cp ".;*.jar" MyRtmpClient.Java

Mais je reçois l'erreur:

MyRtmpClient.Java:3: package org.Apache.mina.common does not exist
import org.Apache.mina.common.ByteBuffer;

Comment puis-je inclure des fichiers jar dans mon projet?

45
javanewbie

votre ligne de commande est correcte, mais il y a quelques considérations:

  • vous devez avoir javac> = 1.6, car seulement dans cette version, le compilateur analyse le "*" en tant que divers fichiers JAR.
  • vous devez exécuter Windows, car ";" est le séparateur de chemin pour ce système d'exploitation uniquement (il ne fonctionne pas sous Unix, le séparateur de chemin sous Unix est ":").

Je suppose que le fichier JAR a la structure de répertoires appropriée comme vous l'avez indiqué.

26
cd1

javac ne comprend pas * .jar dans l'argument classpath. Vous devez spécifier explicitement chaque pot. par exemple.

javac -cp ".;mina.jar" MyRtmpClient.Java
16
Mark

Dans javac JDK 6 et supérieur, vous pouvez utiliser ( noter le manque de .jar ):

javac -cp ".;*" MyRtmpClient.Java

pour citer javac - Java compilateur de langage de programmation

Par commodité, un élément de chemin de classe contenant un nom de base * est considéré comme équivalent à spécifier une liste de tous les fichiers du répertoire avec l'extension .jar ou .JAR.

Par exemple, si le répertoire foo contient a.jar et b.JAR, l'élément de chemin de classe foo/* est développé en A.jar; b.JAR, sauf que l'ordre des fichiers jar n'est pas spécifié. Tous les fichiers jar du répertoire spécifié, même ceux cachés, sont inclus dans la liste. Une entrée classpath consistant simplement en * se développe en une liste de tous les fichiers jar du répertoire courant.

9
Maciej Matys

Dans votre cas, je pense que JAVAC ne trouve pas le fichier jars.

S'il vous plaît essayez:

PROJECT_PATH
- lib\a.jar
- src\package\b.Java

cd @PROJECT_PATH

javac -classpath lib\a.jar src\package\b.Java
8
thanhduyspkt

Si vous avez à votre disposition les utilitaires find et tr (par exemple, vous travaillez sous Linux), vous pouvez faire:

javac -cp .:`find * -name "*.jar" | tr "\n" ":"` MyRtmpClient.Java

Tous les fichiers jar dans le répertoire courant et tous ses sous-répertoires seront ajoutés (la commande Shell répertorie tous les jar fichiers et met des deux-points comme séparateurs entre eux).


  • paire de backticks (`) désignent les commandes Shell à exécuter,
  • find * -name "*.jar" recherche et répertorie tous les fichiers jar dans la hiérarchie dont la racine est le dossier actuel,
  • la barre verticale () est pipe; connecte la sortie de find à l'entrée de la commande suivante,
  • tr "\n" ":" remplace tous les caractères de nouvelle ligne par des caractères deux-points .
7
plesiv

Probablement la syntaxe ci-dessous fonctionnera sur la commande Windows DOS

javac -cp ".;first.jar;second.jar;third.jar" MyRtmpClient.Java
4
shashank

En Java 8, l'option ".; *" Etc. qui sont mentionnés ci-dessus ne semble pas fonctionner. J'ai essayé et constaté que: javac -cp '<location of jars>/*' MyRtmpClient.Java

travaux:

<location of jar> peut être/usr/local/classes/* ou/home/developer/MyProject/*

1
Ankush