classpath - l'exécution d'un programme java en ligne de commande
Mon code compilé correctement avec la commande suivante:
javac -cp "../lib/*" AvroReader.java
(lib est où j'ai mis mes fichiers jar)
Au moment de l'exécution j'obtiens un ClassNotFoundException
sur la ligne suivante:
DatumReader<?> dtmrdr = new GenericDatumReader();
Il dit qu'il ne peut pas trouver org.apache.avro.generic.GenericDatumReader
, même si j'ai importé.
Pourquoi ce qui se passe?
Merci!
- Comment êtes-vous d'exécuter le programme? Vous devez fournir le chemin de classe avec tous vos dépendances lorsque vous exécutez votre application.
- Je l'ai couru en exécutant
java Generator
. Le générateur est une classe qui appelle une méthode dans AvroReader.java
Vous devez vous connecter pour publier un commentaire.
L'importation n'a rien à voir avec le chargement des classes ou paramètre CLASSPATH.
Essayez ceci:
À l'aide de la dot
'.'
comme la première entrée dans le CLASSPATH suppose que leGenerator.class
fichier existe dans le répertoire à partir duquel vous êtes en cours d'exécution java, et/lib
est d'un niveau supérieur à partir de ce répertoire. Ajuster selon le besoin, si ces deux ne sont pas correctes.-cp
est le chemin de la classe. C'est une liste de répertoires séparés par des;
caractères. Le premier élément est.
qui signifiethe current directory
. Le deuxième élément est../lib/*
ce qui signifie que tout dans la../lib
répertoire. Duffymo est vous dire que vous devez inclure lecurrent directory
(l'emplacement de Generator.class à votre classpath.java -cp .:"../lib/*" Generator
Vous devez exécuter le programme, y compris de nouveau le même cp:
Après avoir compilé avec:
Plus appliqué à votre exemple:
javac -cp "jar directory" AvroReader.java
javac Generator.java
java Generator
j'ai essayé ce que vous avez suggéré java -cp "pot répertoire" Générateur, mais maintenant, c'est à dire qu'il ne peut pas trouver Générateur.java Generator
il ne fonctionnera pas parce que vous n'êtes pas la spécification d'un chemin de classe. Votre commentaire semble contredire l'info dans votre question, mais...