J'ai compilé un programme HelloWorld et j'utilise la commande Invite pour l'exécuter. Le fichier .class est nommé HelloWorld2.class
Le fichier se trouve dans C:\Utilisateurs\Matt\espace de travail\HelloWorld2\bin.
C:\Users\Matt>Java HelloWorld2
Exception in thread "main" Java.lang.NoClassDefFoundError: HelloWorld2
Caused by: Java.lang.ClassNotFoundException: HelloWorld2
at Java.net.URLClassLoader$1.run(Unknown Source)
at Java.security.AccessController.doPrivileged(Native Method)
at Java.net.URLClassLoader.findClass(Unknown Source)
at Java.lang.ClassLoader.loadClass(Unknown Source)
at Sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at Java.lang.ClassLoader.loadClass(Unknown Source)
Could not find the main class: HelloWorld2. Program will exit.
Je m'attendais à voir un HelloWorld imprimé. Qu'est-ce que je fais mal? J'ai le JDK installé.
Vous devez définir le chemin de classe pour trouver votre classe compilée:
Java -cp C:\Users\Matt\workspace\HelloWorld2\bin HelloWorld2
Pour exécuter fichier de classe Java à partir de la ligne de commande, la syntaxe est la suivante:
Java -classpath /path/to/jars <packageName>.<MainClassName>
où packageName (commençant généralement par com
ou org
) est le nom du dossier dans lequel votre fichier de classe est présent.
Par exemple, si le nom de votre classe principale est App et nom du package Java de votre application est com.foo.app
, votre fichier de classe doit être dans com/foo/app
dossier (dossier séparé pour chaque point), vous exécutez votre application en tant que:
$ Java com.foo.app.App
Remarque: $
indique l'invite du shell, ignorez-le lors de la saisie.
Si votre classe n'a pas de nom package
défini, exécutez-le simplement comme suit: Java App
.
Si vous avez d'autres dépendances de jar, assurez-vous que vous avez spécifié votre paramètre classpath avec -cp
/-classpath
ou en utilisant CLASSPATH
variable qui pointe vers le dossier avec votre jar / war / oreille / Zip / class fichiers. Donc, sur Linux, vous pouvez préfixer la commande avec: CLASSPATH=/path/to/jars
, sous Windows, vous devez ajouter le dossier dans la variable système. S'il n'est pas défini, le chemin de la classe d'utilisateurs est constitué du répertoire en cours (.
).
Étant donné que nous avons créé un exemple de projet en utilisant Maven en tant que:
$ mvn archetype:generate -DgroupId=com.foo.app -DartifactId=my-app -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false
et nous avons compilé notre projet par mvn compile
dans notre my-app/
dir, il va générer notre fichier de classe est en target/classes/com/foo/app/App.class
.
Pour l'exécuter, nous pouvons soit spécifier le chemin de classe via -cp
ou allez directement à l’affichage, consultez les exemples ci-dessous:
$ find . -name "*.class"
./target/classes/com/foo/app/App.class
$ CLASSPATH=target/classes/ Java com.foo.app.App
Hello World!
$ Java -cp target/classes com.foo.app.App
Hello World!
$ Java -classpath .:/path/to/other-jars:target/classes com.foo.app.App
Hello World!
$ cd target/classes && Java com.foo.app.App
Hello World!
Pour vérifier votre nom de classe et de paquet, vous pouvez utiliser Java, par exemple:
$ javap target/classes/com/foo/app/App.class
Compiled from "App.Java"
public class com.foo.app.App {
public com.foo.app.App();
public static void main(Java.lang.String[]);
}
Remarque: javap
ne fonctionnera pas si le fichier compilé a été obscurci.
Cela peut signifier beaucoup de choses, mais le plus commun est que la classe contenue dans le fichier n'a pas le même nom que le fichier lui-même. Alors, vérifiez si votre classe s'appelle aussi HelloWorld2.