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.
"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");
}
}
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.
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$
HIrokinoMacBook-Pro:Chapter6 user$ javac hoge/Main.java
HIrokinoMacBook-Pro:Chapter6 user$
java hoge / Main
ausführenIch 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
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
java -classpath .hoge / Main
ausführenFestlegen, 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.
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
java hoge / Main
ausführenHIrokinoMacBook-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