Comment inclure les fichiers JAR lors de la compilation?

J’ai les éléments suivants dans un fichier Java (MyRtmpClient.java):

import org.apache.mina.common.ByteBuffer; 

et ByteBuffer est dans un fichier JAR (avec la structure de répertoires appropriée bien sûr). Ce fichier jar et les autres fichiers dont j’ai besoin se trouvent dans le même répertoire que le fichier .java.

Puis je comstack avec la ligne:

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

Mais j’ai 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?

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

    • Vous devez avoir javac> = 1.6, car dans cette version, le compilateur parsing le “*” sous la forme de plusieurs 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 sur Unix est “:”).

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

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

     javac -cp ".;mina.jar" MyRtmpClient.java 

    Dans votre cas, je pense que JAVAC ne peut pas trouver 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 

    En javac JDK 6 et supérieur Vous pouvez utiliser ( note manque de .jar ):

     javac -cp ".;*" MyRtmpClient.java 

    citer javac – Compilateur de langage de programmation Java

    Pour plus de commodité, un élément de chemin d’access de classe contenant un nom de base de * est considéré comme équivalent à la spécification d’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, alors l’élément de chemin d’access de classe foo / * est étendu à 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 de classpath consistant simplement en * se développe en une liste de tous les fichiers jar du répertoire en cours.

    Si vous avez des utilitaires à votre disposition (par exemple, vous travaillez sous Linux), vous pouvez faire:

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

    Tous les fichiers jar du répertoire courant et tous ses sous-répertoires seront ajoutés (la commande shell répertorie tous les fichiers jar et place les deux points comme séparateurs).


    Explication:

    • paire de backticks ( ` ) dénote 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,
    • barre verticale ( | ) est pipe; connecte la sortie de find à l’entrée de la prochaine commande,
    • tr "\n" ":" remplace tous les caractères de nouvelle ligne par des deux-points .

    Probablement en dessous de la syntaxe fonctionnera sur la commande Windows Dos

     javac -cp ".;first.jar;second.jar;third.jar" MyRtmpClient.java 

    Dans Java 8, l’option “.; *” Etc. mentionnée ci-dessus ne semble pas fonctionner. J’ai essayé et trouvé que: javac -cp '/*' MyRtmpClient.java

    travaux:

    peut être / usr / local / classes / * ou / home / developer / MyProject / *

    essayez d’inclure le fichier jar dans votre ligne de commande pour:

    javac MyRtmpClient.java ByteBuffer.jar

    Vous ne pouvez pas utiliser -cp avec Javac . Vous devez utiliser -classpath place (en supposant que les autres parameters sont corrects).