web-dev-qa-db-fra.com

Pourquoi Java ne parvient pas à exécuter la classe - une erreur s'est produite lors de l'initialisation de la couche de démarrage - Mods de module non trouvés

J'ai parcouru le tutoriel de puzzle de Java 9 . J'ai eu du mal à exécuter la classe, Java jette ci-dessous error-

Java --module-path mods -m mods/com.test/com.test.HelloWorld
Error occurred during initialization of boot layer
Java.lang.module.FindException: Module mods not found

Commande Javac-

javac -d mods --module-source-path src $(find src -name '*.Java')

J'utilise mac, Java version-

$ Java -version
Java version "9"
Java(TM) SE Runtime Environment (build 9+181)
Java HotSpot(TM) 64-Bit Server VM (build 9+181, mixed mode)

Suis-je en train de manquer quelque chose?

5
rashmi mardur

Supprimer des mods supplémentaires du nom du module -

Java --module-path mods -m com.test/com.test.HelloWorld
6
Rahul Sharma

Le -m flag accepte le nom du module et la classe principale que vous souhaitez exécuter. Le nom du module est com.test, donc la commande pour exécuter la classe doit être:

Java --module-path mods -m com.test/com.test.HelloWorld

Le --module-path mods indique à Java où rechercher pour trouver com.test.

3
M Anouti

Lors de la première compilation de votre code à l'aide de la commande javac as-

javac -d mods --module-source-path src $(find src -name '*.Java')

Ce que vous avez assuré en utilisant -d directory était-ce

Définissez le répertoire de destination des fichiers de classe.

dans votre cas, le dossier mods

Si une classe fait partie d'un package, javac place le fichier de classe dans un sous-répertoire qui reflète le nom du package et crée des répertoires selon les besoins.

Par conséquent, vous pouvez jeter un œil au répertoire mods après avoir exécuté la commande, le .class pour tous(*.Java) existerait dans la structure de répertoires correspondante à partir de leur nom de package.


Alors Java option d'outil --module-path module path ou -p module path spécifié dans votre prochaine commande:

Recherche des répertoires dans une liste de répertoires séparés par des points-virgules (;). Chaque répertoire est un répertoire de modules.

Votre répertoire répertorié selon lequel est mods, en supposant que vous devez avoir créé en suivant le lien de démarrage.


Suivi par --module modulename[/mainclass] ou -m module[/mainclass] dans votre commande

Spécifie le module initial à résoudre et le nom de la classe principale à exécuter s'il n'est pas spécifié par le module.

qui dans votre cas est le nom du module com.test et la classe principale com.test.HelloWorld.


Par conséquent, la syntaxe correcte complète de la commande doit être: -

Java --module-path mods    -m     com.test/com.test.HelloWorld
                   ^               ^         ^
           module directory  module name   main class
2
Naman

Merci pour l'info

2 choses que je faisais mal

1) Utiliser à nouveau le chemin du package comme ci-dessous

module\package\package.class

Nous ne devons pas retaper le chemin du package lors de l'exécution de la classe.

2) Utiliser la barre oblique inverse de style au lieu de la barre oblique avant. Nous devons toujours utiliser la barre oblique (/) pour séparer le module de la classe même si vous l'exécutez dans un environnement Windows.

module/package.class

0
user3345469