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?
Supprimer des mods supplémentaires du nom du module -
Java --module-path mods -m com.test/com.test.HelloWorld
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
.
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
où
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
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