Neulich habe ich in einer internen Lernsitzung etwas über Java-Kompilierung und Paketverwaltung gelernt. Da ich nur bearbeiten konnte, was die Umgebung mit Eclipse erstellt wurde, gab mir das Festlegen von Kompilierungsoptionen und das Erstellen von Paketen die Möglichkeit, das Verhalten der Kompilierung und das Verwalten von Paketen besser zu verstehen. Ich werde es hier als Bewertung meiner selbst ausgeben.
・ CentOS7.4 -Java 1.8.0_171 ・ Vi 7.4 ・ Baum 1.6.0
Erstellen Sie ein Verzeichnis, um den Vorgang zu überprüfen.
# cd
# mkdir -p JAVA/src
# cd JAVA
# mkdir class
Wenn Sie die Verzeichnishierarchie aus dem aktuellen Verzeichnis mit dem Befehl tree betrachten, sieht dies wie folgt aus.
# tree --charset=c
.
|-- class
`-- src
Wechseln Sie zunächst zu src und erstellen Sie eine Testquelldatei.
# cd src
# vi TestJava.java
TestJava.java
class TestJava {
public static void main(String[] args){
System.out.println("test");
}
}
Wenn Sie nach dem Erstellen mit den oben genannten Inhalten die Verzeichnishierarchie überprüfen, sieht dies wie folgt aus.
# tree ../ --charset=c
../
|-- class
`-- src
`-- TestJava.java
Kompilieren Sie die erstellte Datei. Wenn Sie hier kompilieren, ohne Optionen anzugeben, wird eine Klassendatei unter src erstellt. Es ist jedoch schwierig, die Klassendatei nach dem Erstellen in ein anderes Verzeichnis zu verschieben. Selbst in Eclipse wurde dieser Bereich automatisch erstellt, sodass ich ihn nicht spürte. Wenn Sie ihn jedoch manuell ausführen, geben Sie die Option an, damit er zum Zeitpunkt der Erstellung im angegebenen Verzeichnis (Klassenverzeichnis) erstellt wird. Verwenden Sie die Option "-d", um das Verzeichnis anzugeben.
# javac -d ../class TestJava.java
Überprüfen Sie nach der Ausführung den Status der Verzeichnishierarchie.
# tree ../ --charset=c
../
|-- class
| `-- TestJava.class
`-- src
`-- TestJava.java
Im angegebenen Klassenverzeichnis wurde eine Datei erstellt. Auf diese Weise werden die Quelldatei und die Klassendatei getrennt verwaltet, sodass niemand die Quelle ohne Erlaubnis bearbeiten kann.
Um dies zur Laufzeit von einem anderen als dem Klassenverzeichnis auszuführen, geben Sie den Dateipfad mit der Option "-cp" an. Er kann auch ausgeführt werden, wenn sich keine Datei im aktuellen Verzeichnis befindet. Dies ist die Methode, wenn CLASSPATH, das von der Umgebungsvariablen festgelegt wurde, in der Befehlszeile ausgeführt wird.
# java -cp ../class TestJava
test
Es wurde ausgeführt und "Test" ausgegeben.
Wenn die Anzahl der Klassendateien zunimmt, verwalten Sie die Pakete separat, um die Verwaltung zu vereinfachen. Es ist auch gut, Namenskonflikte zu vermeiden, selbst wenn Sie bei der Entwicklung mit mehreren Personen eine Datei mit demselben Namen erstellen. Erstellen Sie zunächst ein Verzeichnis für das Paket im Verzeichnis src, löschen Sie die Klassendatei einmal und überprüfen Sie sie.
# mkdir pack1
# mv TestJava.java pack1
# rm -rf ../class/TestJava.class
# cd pack1
# tree ../../ --charset=c
../../
|-- class
`-- src
`-- pack1
`-- TestJava.java
Nur im src-Verzeichnis wird eine Datei im Paketverzeichnis erstellt.
Fügen Sie bei Verwendung des Pakets die folgende Beschreibung am Anfang der Quelle hinzu.
Paket Paketname
Ein Beschreibungsbeispiel lautet wie folgt.
TestJava.java
package pack1;
class TestJava {
public static void main(String[] args){
System.out.println("test");
}
}
Beschreiben Sie den erstellten Paketnamen am Anfang der Quelldatei folgendermaßen. Dieses Mal werden wir nur mit einem einfachen Paketnamen testen, aber in Wirklichkeit werden wir ein Verzeichnis erstellen, indem wir eine Hierarchie wie "jp / co / testcomp / cv" ausgraben. Wenn es dann in der Quelle beschrieben wird, wird der Hierarchiebegrenzer durch "." Dargestellt. Wie `Paket jp.co.testcomp.cv;`
.
Wie im Beispiel wird empfohlen, den Paketnamen mit der Umkehrung des Internetdomänennamens zu beginnen. Dies liegt daran, dass empfohlen wird, das Paket von dem Domainnamen zu benennen, der sich je nach Land oder Unternehmen unterscheidet, damit der Paketname bei der Verwendung von Programmen anderer Unternehmen oder anderer Länder nicht in Konflikt gerät.
Lass es uns erneut versuchen.
# javac -d ../class pack1/TestJava.java
# tree ../ --charset=c
../
|-- class
| `-- pack1
| `-- TestJava.class
`-- src
`-- pack1
`-- TestJava.java
Für jedes Verzeichnis pack1 im Klassenverzeichnis wurde eine Datei erstellt. Wenn die Quelldatei keine Paketbeschreibung enthält, wird nur die Klassendatei ohne den Ordner pack1 im Klassenverzeichnis erstellt.
Es ist gut, die Hierarchie der Quell- und Klassendateien abzugleichen, um keine Verwirrung im Speicherziel zu verursachen. Vergessen Sie daher nicht die Beschreibung des Pakets. (Obwohl Eclipse Fehler erkennen kann)
Die Ausführung ist übrigens wie folgt festgelegt.
# java -cp ../class pack1.TestJava
test
Geben Sie im Klassenpfad das Klassenverzeichnis an, geben Sie es jedoch im Paket als `` `pack1.TestJava``` an. Es kann nicht wie im Fehlerbeispiel mit der angegebenen Methode ausgeführt werden.
Fehlerbeispiel)
# java -cp ../class/pack1 TestJava
# java -cp ../class TestJava
# java ../class/pack1/TestJava
Zuerst habe ich die Datei wie folgt geändert.
TestJava.java
package pack1;
class TestJava {
int i;
char c;
TestJava(){
i = 1;
c = 'A';
}
TestJava( int p_i, char p_c){
i = p_i;
c = p_c;
}
void go() {
System.out.println("GO!");
System.out.println("i =" + i + "\n" + "c = " + c );
}
public static void main(String[] args){
System.out.println("test2");
TestJava tj = new TestJava();
TestJava tj_2 = new TestJava( 2, 'B');
tj.go();
tj_2.go();
}
}
Erstellen Sie Ihre eigene Instanz und geben Sie 2 vom Konstruktor vorbereitete Muster aus. Es ist auch ein Testprogramm, das sogar seine eigene Methode ausgibt.
Ich habe eine andere Datei erstellt.
TestJava2.java
package pack1;
class TestJava2 {
public static void main(String[] args){
System.out.println("TestJava2");
TestJava tj2 = new TestJava();
TestJava tj2_2 = new TestJava2( 2, 'B');
tj2.go();
tj2_2.go();
}
}
Dies ist der Inhalt, um eine Instanz aus der TestJava-Klasse zu erstellen und auszuführen.
Löschen Sie die einmal erstellte Klassendatei und machen Sie es wie folgt.
# tree ../../ --charset=c
../../
|-- class
| `-- pack1
`-- src
`-- pack1
|-- TestJava.java
`-- TestJava2.java
Es gibt folgende Möglichkeiten, diese beiden Dateien zu kompilieren.
javac -d ../../class TestJava.java TestJava2.java
2. Kompilieren Sie die aufrufende Datei und anschließend die aufrufende Datei
In diesem Fall verwendet TestJava2.java TestJava.java, daher müssen Sie auch den Klassenpfad angeben.
Klicken Sie hier für das Ausführungsergebnis.
TestJava2 GO! i =1 c = A GO! i =2 c = B
das ist alles.
Recommended Posts