Le site java <class-name>
syntaxe des commandes
Tout d'abord, vous devez comprendre la manière correcte de lancer un programme à l'aide de la fonction java
(ou javaw
).
La syntaxe normale 1 c'est ça :
java [ <option> ... ] <class-name> [<argument> ...]
où <option>
est une option de ligne de commande (commençant par le caractère "-"), <class-name>
est un nom de classe Java entièrement qualifié, et <argument>
est un argument de ligne de commande arbitraire qui est passé à votre application.
1 - Il existe une deuxième syntaxe pour les fichiers JAR "exécutables" que je décrirai en bas de page.
Par exemple :
java -Xmx100m com.acme.example.ListUser fred
Ce que cela va faire est le suivant :
- Recherchez la version compilée de l
com.acme.example.ListUser
classe.
- Charger la classe.
- Vérifiez que la classe possède un
main
avec la signature static void main(String[])
.
- Appelez cette méthode en lui transmettant les arguments de la ligne de commande sous forme de fichier
String[]
.
Raisons pour lesquelles Java ne peut pas trouver la classe
Lorsque vous obtenez le message "Could not find or load main class ...", cela signifie que la première étape a échoué. Le site java
n'a pas été en mesure de trouver la classe. Et en effet, le "..." dans le message sera le nom de classe entièrement qualifié que java
recherche.
Alors pourquoi ne peut-il pas trouver la classe ? En fait, il y a deux causes principales :
La première cause probable est que vous avez peut-être fourni le mauvais nom de classe. (Ou ... le bon nom de classe, mais sous une forme erronée). mauvaises manières pour spécifier le nom de la classe :
-
Exemple n° 1 - un nom de classe simple :
ListUser
-
Exemple n° 2 - un nom de fichier ou un chemin d'accès plutôt qu'un nom de classe :
ListUser.class
com/acme/example/ListUser.class
-
Exemple n° 3 - un nom de classe dont la casse est incorrecte :
com.acme.example.listuser
-
Exemple n° 4 - une faute de frappe
com.acme.example.mistuser
La deuxième cause probable est que le nom de la classe est correct, mais que l'option java
ne peut pas trouver la classe. Pour comprendre cela, vous devez comprendre le concept de "classpath". Ceci est expliqué bien par la documentation d'Oracle :
Donc ... si vous avez spécifié le nom de la classe correctement, la prochaine chose à vérifier est que vous avez spécifié le classpath correctement :
- Lisez les trois documents liés ci-dessus. (Oui ... LISEZ-les.)
- Regardez la ligne de commande et / ou la variable d'environnement CLASSPATH qui est en vigueur lorsque vous exécutez la commande
java
commande. Vérifiez que les noms des répertoires et des fichiers JAR sont corrects.
- S'il y a relatif dans le classpath, vérifiez qu'ils se résolvent correctement ... à partir du répertoire courant qui est en vigueur lorsque vous exécutez la commande
java
commandement.
- Vérifiez que la classe (mentionnée dans le message d'erreur) peut être localisée dans le répertoire de l'utilisateur. efficace classpath.
Notes supplémentaires :
-
Lorsque vous placez un répertoire sur le classpath, il correspond théoriquement à la racine de l'espace de nom qualifié. Les classes sont situées dans la structure de répertoires sous cette racine, en faisant correspondre le nom pleinement qualifié à un chemin d'accès . Ainsi, par exemple, si "/usr/local/acme/classes" se trouve dans le chemin des classes, alors lorsque la JVM recherche une classe appelée com.acme.example.Foon
il cherchera un fichier ".class" avec ce nom de chemin :
/usr/local/acme/classes/com/acme/example/Foon.class
Si vous aviez mis "/usr/local/acme/classes/com/acme/example" dans le classpath, la JVM ne pourrait pas trouver la classe.
-
Le classpath doit inclure tous les fichiers autre les classes (non système) dont dépend votre application. (Les classes système sont localisées automatiquement, et vous devez rarement vous en préoccuper).
Le site java -jar <jar file>
syntaxe
La syntaxe alternative utilisée pour les fichiers JAR "exécutables" est la suivante :
java [ <option> ... ] -jar <jar-file-name> [<argument> ...]
par exemple
java -Xmx100m -jar /usr/local/acme-example/listuser.jar fred
Dans ce cas, le nom de la classe du point d'entrée (c'est-à-dire le nom de la classe du point d'entrée). com.acme.example.ListUser
) et le classpath sont spécifiés dans le MANIFEST du fichier JAR.
IDEs
Un IDE Java classique prend en charge l'exécution d'applications Java dans la JVM de l'IDE elle-même ou dans une JVM enfant. Ces dernières sont généralement est à l'abri de cette exception particulière, car l'IDE utilise ses propres mécanismes pour construire le classpath d'exécution, identifier la classe principale et créer le fichier java
ligne de commande.
Cependant, il est toujours possible que cette exception se produise, si vous faites des choses derrière l'IDE pour casser les choses. Par exemple, si vous avez précédemment configuré un lanceur d'applications pour votre application Java dans Eclipse, et que vous avez ensuite déplacé le fichier JAR contenant la classe "main" à un autre endroit du système de fichiers, vous pouvez faire ce qui suit sans dire à Eclipse Eclipse lance alors involontairement la JVM avec un classpath incorrect.
En bref, si vous rencontrez ce problème dans un IDE, vérifiez que l'état de l'IDE n'est pas périmé et que les références du projet ou les configurations du lanceur ne sont pas brisées.
Autres références