Je ne peux pas faire que javac reconnaisse un fichier .jar externe, dont je tente d'étendre les classes. J'ai deux fichiers dans le même répertoire: TestConsole.Java et acm.jar. Je compile à partir du même répertoire en utilisant la commande suivante:
javac -classpath .:acm.jar TestConsole.Java
Mais il semble que javac ignore simplement acm.jar. Cela me donne l'erreur:
TestConsole.Java:1: package acm does not exist
import acm.program;
^
Bien sûr, acm.program est un paquet dans acm.jar. Toutes les classes dans acm.jar sont déjà compilées; Je veux juste les utiliser dans mes cours, pas les compiler.
Qu'est-ce que je fais mal?
J'exécute ceci sur un Mac et la structure de répertoire de acm.jar semble être valide: elle contient un répertoire acm/program
, qui contient ConsoleProgram.class
, la seule classe dont TestConsole
s'étend.
javac -classpath ".:acm.jar" TestConsole.Java
ne fonctionne pas non plus.
Liste de contrôle:
vos classes dans acm.jar apparaissent sous la forme:
acm/programme/CLASSX.class
acm/programme/CLASSY.class
décanté avec le pot tf acm.jar
Vous les importez comme:
importer un programme.CLASSX;
ou
importer un programme. *;
javac -cp <jar you want to include>;<jar you want to include> <source.Java>
<jar you want to include>
si dans le même répertoire, juste le nom du fichier jar fera, sinon, spécifier les chemins complets ou relatifs
si plus d'un bocal, séparer avec ,
remplacez ;
par :
sur unix
Si possible, utilisez des IDE comme Eclipse. J'avais l'habitude de passer beaucoup de temps sur des choses similaires, mais dans l'industrie, vous ne le ferez presque jamais de cette façon.
Exécutez-vous ces commandes sur une machine Windows? Sous Windows, les éléments du classpath sont séparés par un point-virgule et non par deux points. Alors:
javac -classpath .;acm.jar TestConsole.Java
Une autre possibilité: la structure de acm.jar
est incorrecte. Il ne suffit pas que les fichiers de classe à l'intérieur aient été compilés à partir de fichiers déclarant package acm.program
; la structure du paquet doit également être représentée comme une hiérarchie de répertoires. acm.jar
doit donc contenir un répertoire acm
, et à l'intérieur de celui-ci un sous-répertoire program
contenant les fichiers de classe réels. classes utilisées dans TestConsole
.
Quiconque essaie de compiler et a toujours le problème alors que je luttais pendant des heures, je suivais toutes les réponses ci-dessus mais je ne pouvais toujours pas exécuter le programme à cause d’un problème mineur.
La question évidente est le point-virgule après chaque colis. Je ne suis pas sûr à propos de Mac ou Linux, mais pour l'invite de commande Windows, c'était le cas
javac -cp mysql-connector-Java-8.0.12.jar; Testing.Java
Java -cp mysql-connector-Java-8.0.12.jar; Testing
Devrait suivre les deux cas de compilation ou en cours d'exécution.