web-dev-qa-db-fra.com

Exécution du programme Java à partir de la ligne de commande Linux

Je ne suis pas très expérimenté avec Java et cela me rend fou. J'ai écrit un programme Java FileManagement et je dois l'exécuter depuis la ligne de commande.

Je peux le compiler depuis la ligne de commande avec javac FileManagement/*.Java qui créera toutes les classes de ce dossier mais quand j'essaye Java FileManagement.Main ça dit :

Exception dans le thread "principal" Java.lang.NoClassDefFoundError: FileManagement/Main

Le truc, c'est que j'ai essayé cette même procédure sur un ordinateur distant et ça marche bien. Il ne fonctionne pas sur le mien.

22
Altober

Si votre classe Main est dans un package appelé FileManagement, essayez:

Java -cp . FileManagement.Main

dans le dossier parent du dossier FileManagement.

Si votre classe Main n'est pas dans un package (le package par défaut), puis cd dans le dossier FileManagement et essayez :

Java -cp . Main

Plus d'informations sur le CLASSPATH et comment le JRE trouve des classes:

21
Bart Kiers

Les gars, comprenons-en la syntaxe.

  1. Si le fichier de classe est présent dans le répertoire actuel.

    Java -cp. FileName

  2. Si le fichier de classe est présent dans le répertoire. Accédez au répertoire parent et entrez ci-dessous cmd.

    Java -cp. Dir1.dir2.dir3.fileName

  3. S'il y a une dépendance sur des pots externes,

    Java -cp.: ./ jarName1: ./ jarName2 fileName

    J'espère que cela t'aides.

6
user001

(Ceci est la réponse KISS.)

Disons que vous avez plusieurs fichiers .Java dans le répertoire courant:

$ ls -1 *.Java
javaFileName1.Java
javaFileName2.Java

Disons que chacun d'eux a une méthode main() (donc ce sont des programmes, pas des bibliothèques), puis pour les compiler, faites:

javac *.Java -d .

Cela générera autant de sous-dossiers que de "packages" auxquels les fichiers .Java sont associés. Dans mon cas, tous les fichiers Java se trouvaient à l'intérieur sous le même nom de package packageName, donc un seul dossier a été généré avec ce nom, donc pour exécuter chacun d'eux:

Java -cp . packageName.javaFileName1
Java -cp . packageName.javaFileName2
3
knocte

Quel est le nom du package de votre classe? S'il n'y a pas de nom de package, alors la solution est probablement:

Java -cp FileManagement Main
1
Thomas Mueller