Was tun, wenn Sie den Befehl "Java-Paketname / Klassenname" nicht ausführen können?

Überblick

Konnte nicht mit Java-Paketname / Klassenname ausgeführt werden, wohingegen Ich habe mich gefragt, was ich mit java -classpath .package name / class name machen könnte. Ich habe meine eigene Problemumgehung gefunden, wie man es mit "Java-Paketname / Klassenname" ausführt, also werde ich es veröffentlichen.

Wenn Sie "Java-Paketname / Klassenname" (oder "Java-Paketname.Klassenname") gemäß dem Lehrbuch eingegeben haben, es aber nicht ausführen können, versuchen Sie bitte den Inhalt dieses Artikels.

Umgebung

Über die auszuführende Datei

"Main.java" (gehört zum "hoge" -Paket)

Es ist ein einfaches Programm, das "hello.java" im Terminal anzeigt, wenn es ausgeführt wird. Das Speicherverzeichnis lautet "/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");
  	}
}

Ursache

Ich muss aus dem aktuellen Verzeichnis ausführen, in dem die Klassendatei gespeichert ist, aber ich habe versucht, aus dem im Klassenpfad in ".bash_profile" festgelegten Pfad auszuführen, in dem die entsprechende Klassendatei nicht gespeichert ist. Schatz.

Die Ursache ist, dass die Java VM (virtuelle Maschine) an der falschen Stelle nach der Klassendatei gesucht hat.

Erläuterung

① Aktuelle Verzeichniseinstellung

Stellen Sie zunächst das aktuelle Verzeichnis auf "/ Users / user / src / Java / sukiri1 / Kapitel 6" ein, in dem das Paket "hoge" gespeichert ist.

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

② Kompilieren

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

③ Mit java hoge / Main ausführen

Ich habe die Fehlermeldung "hoge.Main not found" erhalten.

HIrokinoMacBook-Pro:Chapter6 user$ java hoge/Main
Error:Hauptklasse Hoge.Main konnte nicht gefunden und geladen werden
Ursache: java.lang.ClassNotFoundException: hoge.Main

④ Überprüfen Sie den aktuellen Klassenpfad

Geben Sie den folgenden Befehl in das Terminal ein, um den aktuellen Klassenpfad zu überprüfen.

$ env | grep CLASSPATH

Der in "CLASSPATH =" meines ".bash_profile" festgelegte Pfad wird angezeigt. In "/Applications/Java/apache-tomcat-9.0.36/lib/servlet-api.jar", Die für die Programmausführung erforderliche "hoge / Main.class" wird nicht gespeichert.

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

Referenz ↓ Das ".bash_profile" des Autors

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

⑤ Mit java -classpath .hoge / Main ausführen

Festlegen, von welchem "Speicherort" die Java VM (virtuelle Maschine) die erforderlichen Klassendateien lesen soll Verwenden Sie die Option "-classpath", um das aktuelle Verzeichnis anzugeben, in dem "hoge / Main" gespeichert ist. ". (Punkt)" bezieht sich auf das aktuelle Verzeichnis.

Die Option "-classpath" hat eine Funktion zum Festlegen des Klassenpfads für jede ** Anwendung **, Hier ** "Führen Sie die Anwendung" hoge / Main "dieses Mal mit dem" aktuellen Verzeichnis "als Klassenpfad aus!" ** Es wird gesagt. Selbst wenn Sie den Klassenpfad in der unten beschriebenen "CLASSPATH-Umgebungsvariablen" festlegen, können Sie diese Option verwenden. Der in der Umgebungsvariablen "CLASSPATH" festgelegte Klassenpfad ist ungültig, und der in der Option "-classpath" festgelegte Klassenpfad ist festgelegt.

Informationen zu "CLASSPATH-Umgebungsvariable" Dies ist eine Methode, um den Klassenpfad im Voraus im Betriebssystem zu registrieren, damit Sie der Java-VM nicht jedes Mal zur Laufzeit den Speicherort mit "-class path" mitteilen müssen. Das Registrieren des Klassenpfads im Betriebssystem auf diese Weise gilt für alle Anwendungen.

Als ich den Befehl "env | grep CLASSPATH" in ④ eingab, wurde der in "CLASSPATH =" meines ".bash_profile" festgelegte Pfad angezeigt. Dies ist der im Betriebssystem registrierte Klassenpfad. Sofern mit "-classpath" nicht anders angegeben, wird dieser in der Umgebungsvariablen festgelegte Klassenpfad automatisch angewendet Wenn Sie den Befehl "env | grep CLASSPATH" eingeben, befindet er sich nicht im aktuellen Verzeichnis, in dem die Klassendateien gespeichert sind. Dieser in der Umgebungsvariablen festgelegte Klassenpfad wird an das Terminal ausgegeben.

Informationen zu "-classpath" und "CLASSPATH-Umgebungsvariablen" finden Sie in den folgenden Artikeln. Der Top-Artikel ist sehr leicht zu verstehen. 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

Es ist lange her, aber als ich es mit java -classpath .hoge / Main ausgeführt habe, hat es wie unten funktioniert.


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

Von hier aus werde ich die Methode zur Ausführung mit dem Befehl "Java-Paketname / Klassenname" vorstellen.

⑥ Löschen Sie den Klassenpfad

Geben Sie den folgenden Befehl in das Terminal ein, um die Umgebungsvariable zu löschen.

$ export CLASSPATH=

Geben Sie erneut "$ env | grep CLASSPATH" ein und ...

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

Ich konnte bestätigen, dass der Klassenpfad gelöscht wurde.

Referenz So löschen Sie den Klassenpfad http://javacafebreak.tripod.com/document/cpad_tips/cpad_classpath.html

So schreiben Sie die Umgebungsvariable CLASSPATH vom Terminal aus neu https://style.potepan.com/articles/17670.html

⑦ Mit java hoge / Main ausführen

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

Es ist ein Erfolg. Übrigens können Sie es auch wie folgt mit java hoge.Main ausführen.

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

Wenn weder in "CLASSPATH-Umgebungsvariable" noch in "-classpath" ein Klassenpfad angegeben ist Das aktuelle Verzeichnis wird als Klassenpfad festgelegt. Selbst wenn Sie den Befehl eingeben, ohne "java hoge.Main" und den Klassenpfad einzuschließen, Die Java-VM konnte die Paket- und Klassendateien finden und ausführen.

Es ist lange her, aber das war's!

Recommended Posts

Was tun, wenn Sie den Befehl "Java-Paketname / Klassenname" nicht ausführen können?
Was tun, wenn der Befehl adb nicht ausgeführt werden kann?
Was tun, wenn der Befehl Rails unbrauchbar wird?
Was tun, wenn der Vorgang nicht zulässig ist, wenn ein Befehl im Terminal ausgeführt wird?
Was tun, wenn Sie die Listen-Adresse im Einstellungsbildschirm des Dockers Mattermost ändern?
Was tun, wenn Sie Ruby mit rbenv installiert haben, die Version sich jedoch nicht ändert?
[Schienen] Was tun, wenn mit der Fehlermethode keine Fehlermeldung angezeigt wird?
Was tun, wenn die Validierung mit der Aktualisierungsaktion nicht funktioniert?
Was tun, wenn Sie Ihr Root-Passwort unter CentOS7 vergessen haben?
[Rails] Was tun, wenn Sie mit form_with keine Parameter abrufen können?
Was tun, wenn JavaMail nicht mit OpenJDK 11 oder höher verwendet werden kann?
Was tun, wenn Sie das Plug-In nicht vom Eclipse Marketplace installieren können?
Was tun, wenn Ihnen der von swagger-codegen-cli generierte Code nicht gefällt?
Was tun, wenn Sie falsche Informationen eingeben?
Was tun, wenn Sie eine Anwendung mit dem Namen erhalten? AppName ist bereits registriert. Wenn Sie versuchen, GlassFish zu starten
Was tun, wenn in CircleCI der Fehler zu lang ohne Ausgabe (über 10 m0s) angezeigt wird?
Was tun, wenn Sie das mit bootstrap-select erstellte Auswahlfeld nicht aktivieren können?
Was tun, wenn Sie Java für OS X unter macOS installiert haben?
Was tun, wenn Um die fehlende Version zu installieren, führen Sie `gem install bundler: 2.1.4` aus
Was tun, wenn der Build mit dem Fehler "Mit Swift x.x.x kompiliertes Modul kann vom Swift x.x.x-Compiler nicht importiert werden" fehlschlägt.
Was tun, wenn Sie aktiviert haben? Verwenden Sie die WSL2-basierte Engine in Docker Desktop mit unzureichender WSL2-Installation
So übersetzen Sie die Fehlermeldung ins Japanische (Was tun, wenn Sie sich aus irgendeinem Grund nicht anmelden können)
Was tun, wenn der Rails-Server nicht gestartet werden kann?
Was tun, wenn Sie versehentlich ein Modell erstellen?
Was tun, wenn beim Versuch, Eclipse unter Java 9 auszuführen, ein NoClassDefFoundError angezeigt wird?
Was tun, wenn die Annotation JSON Hint nicht mit Lombok und JSONIC funktioniert?
Was tun, wenn beim Hochladen mit App Store Connect zu viele Symboldateien an die Wand stoßen?
[Java] Was tun, wenn sich der in der Datenbank gespeicherte Inhalt und der Name der Aufzählung in der Aufzählung unterscheiden, die die Definition der Datenbank widerspiegelt?
[Lösung] Was tun, wenn ein Docker-Fehler angezeigt wird? FEHLER: Unter Unix: ///var/run/docker.sock kann keine Verbindung zum Docker-Dämon hergestellt werden. Wird der Docker-Dämon ausgeführt?
So erhalten Sie den Namen einer Klasse / Methode, die in Java ausgeführt wird
Was tun, wenn in GlassFish eine java.io.IOException auftritt?
[Rails] Was tun, wenn Sie versehentlich eine Bundle-Installation in einer Produktionsumgebung in Ihrer lokalen Umgebung durchführen?
[Rails Tutorial Kapitel 2] Was tun, wenn Sie einen Fehlern im Spaltennamen machen?
[Ubuntu 20.04] Was tun, wenn der externe Monitor nicht erkannt wird?
Ausführen des Postgresql-Kopierbefehls mit Spalteninformationen in Java
Was tun, wenn in Docker ein gcc-Fehler auftritt?
Wenn Sie die übergeordnete Klasse in Lomboks @builder aufnehmen möchten
Wenn Sie die Java-Entwicklungsumgebung von Eclipse aus ändern möchten
Was tun, wenn die Rails-Seite im Rails-Lernprogramm 1.3.2 nicht angezeigt wird?
Was tun, wenn Cloud 9 im Rails-Lernprogramm voll ist?
Hinweise, was zu tun ist, wenn das Eclipse Maven-Abhängigkeitsglas nicht korrekt ist
Was tun, wenn Sie gem'bcrypt 'in Ihre Gemfile eingeben und bei der Bundle-Installation eine Fehlermeldung erhalten?
Das erste, was Sie tun müssen, wenn Sie mit Heroku auf GitHub mit Eclipse auf Java zufrieden sein möchten
[IOS] Was tun, wenn das Bild mit einer Farbe gefüllt ist?
Was tun, wenn Sie in Thymeleaf Layout eine groovige Warnung erhalten?
Was tun, wenn das Hintergrundbild nach der Bereitstellung nicht angewendet wird?
Was tun, wenn das Präfix c in JSP nicht gebunden ist?
Was tun, wenn CentOS nicht mit VirtualBox unter Catalina gestartet werden kann?