Que faire si vous ne pouvez pas exécuter avec la commande "nom du package Java / nom de la classe"

Aperçu

Impossible d'exécuter avec java package name / class name, alors que Je me demandais ce que je pouvais faire avec java -classpath .package name / class name, J'ai trouvé ma propre solution de contournement sur la façon de l'exécuter avec java package name / class name, donc je le posterai.

Si vous avez entré java package name / class name (ou java package name.class name) selon le manuel mais ne pouvez pas l'exécuter, veuillez essayer le contenu de cet article.

environnement

À propos du fichier à exécuter

"Main.java" (appartient au paquet "hoge")

C'est un programme simple qui affiche "hello.java" dans le terminal lorsqu'il est exécuté. Le répertoire de stockage est "/Users/user/src/Java/sukiri1/Chapter6/hoge/Main.java".

Main.java


package hoge;

public class Main {
	public static void main(String[] args) {
		System.out.println("hello.java");
  	}
}

Cause

Je dois exécuter à partir du répertoire actuel où le fichier de classe est stocké, mais j'ai essayé d'exécuter à partir du chemin défini dans le chemin de classe dans ".bash_profile" où le fichier de classe correspondant n'est pas stocké. Trésor.

La cause est que la machine virtuelle Java (machine virtuelle) est allée chercher le fichier de classe au mauvais endroit.

La description

① Paramètre actuel du répertoire

Tout d'abord, définissez le répertoire courant sur "/ Users / user / src / Java / sukiri1 / Chapter 6" où le paquet "hoge" est stocké.

HIrokinoMacBook-Pro:hoge user$ cd /Users/user/src/Java/sukiri1/Chapter6
HIrokinoMacBook-Pro:Chapter6 user$

② Compiler

HIrokinoMacBook-Pro:Chapter6 user$ javac hoge/Main.java
HIrokinoMacBook-Pro:Chapter6 user$ 

③ Exécuter avec java hoge / Main

J'ai eu une erreur disant "hoge.Main not found".

HIrokinoMacBook-Pro:Chapter6 user$ java hoge/Main
Erreur:Hoge de classe principale.Impossible de trouver et de charger Main
Cause: java.lang.ClassNotFoundException: hoge.Main

④ Vérifiez le chemin de classe actuel

Entrez la commande suivante dans le terminal pour vérifier le chemin de classe actuel.

$ env | grep CLASSPATH

Le chemin défini dans "CLASSPATH =" de mon ".bash_profile" s'affiche. Dans "/Applications/Java/apache-tomcat-9.0.36/lib/servlet-api.jar", Le "hoge / Main.class" requis pour l'exécution du programme n'est pas stocké.

HIrokinoMacBook-Pro:Chapter6 user$ env | grep CLASSPATH
CLASSPATH=/Applications/Java/apache-tomcat-9.0.36/lib/servlet-api.jar

Référence ↓ Le ".bash_profile" de l'auteur

export JAVA_HOME="$(/usr/libexec/java_home -v 14.0.1)"
export CATALINA_HOME=/Applications/Java/apache-tomcat-9.0.36
export PATH="/usr/bin:${PATH}:${JAVA_HOME}"
export ANT_HOME=/Users/user/tool/apache-ant-1.10.8
export PATH=${PATH}:${ANT_HOME}/bin
export PATH=${PATH}:/Users/user/tool
export CATALINA_OPTS=-Dfile.encoding=UTF-8
export CLASSPATH=/Applications/Java/apache-tomcat-9.0.36/lib/servlet-api.jar

⑤ Exécutez avec java -classpath .hoge / Main

Pour spécifier à partir de quel «emplacement» la machine virtuelle Java (machine virtuelle) doit lire les fichiers de classe requis Utilisez l'option "-classpath" pour spécifier le répertoire courant où "hoge / Main" est stocké. ". (Point)" fait référence au répertoire courant.

L'option "-classpath" a une fonction pour définir le chemin de classe pour chaque ** application **, Ici ** "Lancer l'application" hoge / Main "cette fois avec le" répertoire courant "comme chemin de classe!" ** C'est dit. Même si vous définissez le chemin d'accès aux classes dans la "variable d'environnement CLASSPATH" décrite ci-dessous, vous pouvez utiliser cette option. Le chemin d'accès aux classes défini dans la "variable d'environnement CLASSPATH" est invalidé et le chemin d'accès aux classes défini dans l'option "-classpath" est défini.

À propos de la "variable d'environnement CLASSPATH" Il s'agit d'une méthode pour pré-enregistrer le chemin de classe dans le système d'exploitation afin que vous n'ayez pas à indiquer à la VM Java l'emplacement avec "-class path" à chaque fois au moment de l'exécution. L'enregistrement du chemin de classe dans le système d'exploitation de cette manière s'applique à toutes les applications.

Quand j'ai tapé la commande "env | grep CLASSPATH" dans ④, le chemin défini dans "CLASSPATH =" de mon ".bash_profile" était affiché, mais c'est le chemin de classe enregistré dans l'OS. Sauf indication contraire avec "-classpath", ce chemin de classe défini dans la variable d'environnement est automatiquement appliqué, donc Si vous tapez la commande "env | grep CLASSPATH", elle ne sera pas dans le répertoire courant où sont stockés les fichiers de classe. Ce chemin de classe défini dans la variable d'environnement est envoyé au terminal.

Pour «-classpath» et «variable d'environnement CLASSPATH», reportez-vous aux articles suivants. L'article principal est très facile à comprendre. https://www.javaroad.jp/java_basic2.htm https://docs.oracle.com/javase/jp/6/technotes/tools/windows/classpath.html https://style.potepan.com/articles/17670.html https://www.atmarkit.co.jp/fjava/onepoint/java/jv_jcmd.html

Cela faisait longtemps, mais quand je l'ai exécuté avec java -classpath .hoge / Main, cela fonctionnait bien comme ci-dessous.


HIrokinoMacBook-Pro:Chapter6 user$ java -classpath . hoge/Main
hello.java

Maintenant, à partir de là, je vais vous présenter la méthode d'exécution avec la commande "java package name / class name".

⑥ Supprimer le chemin de classe

Entrez la commande suivante dans le terminal pour supprimer la variable d'environnement.

$ export CLASSPATH=

Entrez à nouveau $ env | grep CLASSPATH, et ...

HIrokinoMacBook-Pro:Chapter6 user$ env | grep CLASSPATH
CLASSPATH=

J'ai pu confirmer que le chemin de classe a été supprimé.

référence Comment supprimer le chemin de classe http://javacafebreak.tripod.com/document/cpad_tips/cpad_classpath.html

Comment réécrire la variable d'environnement CLASSPATH à partir du terminal https://style.potepan.com/articles/17670.html

⑦ Exécuter avec java hoge / Main

HIrokinoMacBook-Pro:Chapter6 user$ java hoge/Main
hello.java

C'est un succès. En passant, vous pouvez également l'exécuter avec java hoge.Main comme suit.

HIrokinoMacBook-Pro:Chapter6 user$ java hoge.Main
hello.java

Si aucun chemin de classe n'est spécifié dans la "variable d'environnement CLASSPATH" ou "-classpath" Le répertoire courant est défini comme chemin de classe. Par conséquent, même si vous entrez la commande sans inclure java hoge.Main et le chemin de classe, La machine virtuelle Java a pu trouver le package et les fichiers de classe, elle a donc pu s'exécuter.

Ça fait longtemps, mais c'est tout!

Recommended Posts

Que faire si vous ne pouvez pas exécuter avec la commande "nom du package Java / nom de la classe"
Que faire si la commande adb ne peut pas être exécutée
Que faire si la commande rails devient inutilisable
Que faire si l'opération non autorisée s'affiche lors de l'exécution d'une commande dans le terminal
Que faire si vous modifiez l'adresse d'écoute à partir de l'écran des paramètres dans le menu fixe Mattermost
Que faire si vous avez installé Ruby avec rbenv mais que la version ne change pas
[Rails] Que faire si vous ne pouvez pas obtenir de message d'erreur avec la méthode des erreurs
Que faire lorsque la validation ne fonctionne pas avec l'action de mise à jour
Que faire si vous oubliez votre mot de passe root sur CentOS7
[Rails] Que faire si vous ne pouvez pas obtenir de paramètres avec form_with
Que faire si JavaMail ne peut pas être utilisé avec OpenJDK 11 ou version ultérieure
Que faire si vous ne pouvez pas installer le plug-in à partir d'Eclipse Marketplace
Que faire si vous n'aimez pas le code généré par swagger-codegen-cli
Que faire si vous transmettez des informations incorrectes
Que faire si l'application dont le nom est appName est déjà enregistrée. Lorsque vous essayez de démarrer GlassFish
Que faire si vous obtenez l'erreur Trop long sans sortie (dépassé 10m0s) dans CircleCI
Que faire si vous ne pouvez pas activer la boîte de sélection créée par bootstrap-select
Que faire si vous avez installé Java pour OS X sur macOS
Que faire quand Pour installer la version manquante, exécutez `gem install bundler: 2.1.4`
Que faire si la construction échoue avec l'erreur «Le module compilé avec Swift x.x.x ne peut pas être importé par le compilateur Swift x.x.x»
Que faire si vous avez activé Utiliser le moteur basé sur WSL2 dans Docker Desktop avec une installation WSL2 insuffisante
Comment traduire le message d'erreur en japonais (que faire si vous ne pouvez pas vous connecter pour une raison quelconque)
Que faire si le serveur Rails ne peut pas démarrer
Que faire si vous créez accidentellement un modèle
Que faire si vous obtenez une erreur NoClassDefFoundError lorsque vous essayez d'exécuter eclipse sur Java 9
Que faire si l'annotation JSON Hint ne fonctionne pas avec Lombok et JSONIC
Que faire si vous frappez le mur de trop de fichiers de symboles lors du téléchargement avec App Store Connect
[Java] Que faire si le contenu enregistré dans la base de données et le nom de l’énumération sont différents dans l’énumération qui reflète la définition de la base de données
[Solution] Que faire si vous obtenez une erreur Docker "ERREUR: Impossible de se connecter au démon Docker sous unix: ///var/run/docker.sock. Le démon docker est-il en cours d'exécution?"
Comment obtenir le nom d'une classe / méthode exécutée en Java
Que faire lorsqu'une exception java.io.IOException se produit dans GlassFish
[Rails] Que faire si vous effectuez accidentellement une installation groupée dans un environnement de production de votre environnement local
[Tutoriel Rails Chapitre 2] Que faire lorsque vous faites une erreur dans le nom de la colonne
[Ubuntu 20.04] Que faire si le moniteur externe n'est pas reconnu
Comment exécuter la commande de copie Postgresql avec des informations de colonne sur Java
Que faire si vous obtenez une erreur gcc dans Docker
Si vous souhaitez inclure la classe parente dans @builder de Lombok
Si vous souhaitez modifier l'environnement de développement Java d'Eclipse
Que faire si la page Rails n'est pas affichée dans le didacticiel Rails 1.3.2
Que faire lorsque Cloud 9 est plein dans le didacticiel Rails
Remarques sur la marche à suivre si le Jar de dépendance Eclipse Maven est incorrect
Que faire si vous entrez gem'bcrypt 'dans votre Gemfile et obtenez une erreur avec l'installation du bundle
La première chose à faire lorsque vous voulez être satisfait d'Heroku sur GitHub avec Eclipse sur Java
[IOS] Que faire lorsque l'image est remplie d'une seule couleur
Que faire si vous obtenez un avertissement groovy dans Thymeleaf Layout
Que faire si l'image d'arrière-plan n'est pas appliquée après le déploiement
Que faire lorsque le préfixe c n'est pas lié dans JSP
Que faire lorsque CentOS ne peut pas être démarré avec VirtualBox sur Catalina