Was ich über Java 9 recherchiert habe

Überblick

Es scheint, dass Java 10 (Ist es 18.3?) Bald erscheinen wird, also habe ich beschrieben, was ich mit der in 9 hinzugefügten Funktion untersucht und versucht habe.

Was ich nachgeschlagen habe

JShell JShell wurde eingeführt. Sie können Code interaktiv über die Befehlszeile ausführen. Wenn Sie einen einfachen Code ausführen möchten, können Sie die Ausführung mithilfe einer Klassendatei vermeiden.

helloworld.jpg

List.of、Set.of、Map.of Der Auflistungsklasse wurde eine Factory-Methode hinzugefügt.

List<String> list = List.of("Kaffee Milch", "Erdbeermilch");
Set<String> set = Set.of("Remon Milch", "Melonenmilch");
Map<String, String> map = Map.of("Kaffee Milch", "100 Yen", "Erdbeermilch", "120 Yen");

Die mit der of-Methode erstellte Sammlung ist unveränderlich.

Modulfunktion

Mit der Einführung der Modulfunktion ist es möglich geworden, den Umfang der Offenlegung und die Abhängigkeiten von Modulen zu klären. Öffentliche Methoden wie Bibliotheken wurden in Klassen referenziert, die nicht verwendet werden sollten ... Sie können solche Dinge auch verhindern. Referenz: Project Jigsaw

Wenn Sie die Modulfunktion nicht verwenden

Ordnerstruktur der aufgerufenen Seite (jar) (1)


gyunyu/
 ┗━ src/
    ┗━ jp/gr/java_conf/masakado/gyunyu/
       ┣━ Coffee.java
       ┗━ util/
          ┗━ Utility.java

Coffee.java


public class Coffee {
	public void print() {
		Utility.output("Kaffee");
	}
}

java.Utility.java


public class Utility {
	public static void output(String name) {
		System.out.println("das ist," + name + "Es ist Milch.");
	}
}

Utility.output (...) soll nur im Gyunyu-Projekt verwendet werden. Diese Methode darf nicht von außen ausgeführt werden.

Kompilieren Sie die beiden oben genannten Dateien, um gyunyu.jar zu erstellen.

javac -d bin -encoding UTF-8 src\jp\gr\java_conf\masakado\gyunyu\Coffee.java src\jp\gr\java_conf\masakado\gyunyu\util\Utility.java
jar -cvf gyunyu.jar -C bin .

Ordnerstruktur des Anrufers (1)


sample/
 ┣━ src/
 ┃  ┗━ jp/gr/java_conf/masakado/sample/
 ┃     ┗━ Main.java
 ┗━ lib/
    ┗━ gyunyu.jar

Main.java


import jp.gr.java_conf.masakado.gyunyu.Coffee;
import jp.gr.java_conf.masakado.gyunyu.util.Utility;
public class Main {
	public static void main(String[] args) {
		(new Main()).execute();
	}

	public void execute() {
		Coffee coffee = new Coffee();
		coffee.print();
		Utility.output("Unerwarteter Anruf: Ichigo"); //Verweisen Sie auf eine Methode, die nicht von außen ausgeführt werden soll
	}
}

Es bezieht sich auf "Utility.output (...)" von "gyunyu.jar", das nicht von außen ausgeführt werden soll. Wenn Sie dies kompilieren und ausführen

javac -d bin -cp lib\gyunyu.jar -encoding UTF-8  src\jp\gr\java_conf\masakado\sample\Main.java
java -cp lib\gyunyu.jar;bin jp.gr.java_conf.masakado.sample.Main

Es wird wie folgt angezeigt.

sample01.jpg

Bei Verwendung der Modulfunktion

Erstellen Sie module-info.java auf der aufgerufenen Seite (jar).

Ordnerstruktur der aufgerufenen Seite (jar) (2)


gyunyu/
 ┗━ src/
    ┣━ jp/gr/java_conf/masakado/gyunyu/
    ┃  ┣━ Coffee.java
    ┃  ┗━ util/
    ┃     ┗━ Utility.java
    ┗━ module-info.java

module-info.java


module jp.gr.java_conf.masakado.gyunyu {
	exports jp.gr.java_conf.masakado.gyunyu;
}

Exporte: Geben Sie das Paket an, das nach außen veröffentlicht werden soll.

Der Modulname ist der gleiche wie der Paketname, Sie müssen ihn jedoch nicht mit dem Paketnamen abgleichen und können ihn frei benennen. Kompilieren Sie dies, um eine JAR-Datei zu erstellen.

javac -d bin -encoding UTF-8 src\module-info.java src\jp\gr\java_conf\masakado\gyunyu\Coffee.java src\jp\gr\java_conf\masakado\gyunyu\util\Utility.java
jar -cvf gyunyu.jar -C bin .

Platziere das erstellte gyunyu.jar in sample / lib und erstelle module-info.java.

Ordnerstruktur des Anrufers (1)


sample/
 ┣━ src/
 ┃  ┣━ jp/gr/java_conf/masakado/sample/
 ┃  ┃  ┗━ Main.java
 ┃  ┗━ module-info.java
 ┗━ lib/
    ┗━ gyunyu.jar

module-info.java


module jp.gr.java_conf.masakado.sample {
	requires jp.gr.java_conf.masakado.gyunyu;
}

require: Geben Sie das abhängige (verwendete) Modul an.

Kompilieren Sie, indem Sie gyunyu.jar mit der Option -p angeben.

javac -d bin -p lib\gyunyu.jar -encoding UTF-8 src\module-info.java src\jp\gr\java_conf\masakado\sample\Main.java

Die folgende Fehlermeldung wird ausgegeben und die Kompilierung schlägt fehl.

Paket jp.gr.java_conf.masakado.gyunyu.util kann nicht angezeigt werden
(Paket jp.gr.java_conf.masakado.gyunyu.util ist ein Modul jp.gr.java_conf.masakado.Von Gyunyu deklariert, aber nicht exportiert)

Wenn Sie "Utility.output (...)" löschen, das in "Main.java" beschrieben ist, wird die Kompilierung übergeben.

Modulinformationen anzeigen

Sie können auf die Modulinformationen verweisen, indem Sie den Befehl jar mit der unten gezeigten Option -d ausführen.

jar -d -f lib\gyunyu.jar
exports jp.gr.java_conf.masakado.gyunyu
requires java.base mandated
contains jp.gr.java_conf.masakado.gyunyu.util

Exporte: Veröffentlichte Pakete erfordert: Abhängige Module enthält: Pakete, die nicht im Export aufgeführt sind, aber im Glas enthalten sind

Schließlich

Da die Abhängigkeit durch die Einführung der Modulfunktion leichter verständlich wurde, verlief die Kompilierung gut. Als ich versuchte, sie auszuführen, reichte die JAR nicht aus und es trat ein Fehler auf ... Ich hatte das Gefühl, dass die Möglichkeit, dass so etwas passiert, abnehmen würde. Ich habe mich noch nicht mit JARs befasst, die Module unterstützen, daher kann es lange her sein, dass ich von den Modulfunktionen profitieren kann.

Recommended Posts

Was ich über Java 8 recherchiert habe
Was ich über Java 9 recherchiert habe
Was ich über Java 7 recherchiert habe
Was ich über Java 5 recherchiert habe
Was ich über Java-Lernen recherchiert habe
Was ich über Kotlin gelernt habe
Was ich mit Java Gold gelernt habe
Was ich mit Java Silver gelernt habe
Über die Java-Schnittstelle
[Java] Informationen zu Java 12-Funktionen
Was ist java
[Java] Über Arrays
Nehmen Sie, was Sie über Java-Reflexion gelernt haben
Etwas über Java
Wo ist mit Java?
Informationen zu Java-Funktionen
Was ist Java <>?
Über Java-Threads
[Java] -Schnittstelle
Was ist java
Was ich gelernt habe
Über die Java-Klasse
Informationen zu Java-Arrays
Über Java-Vererbung
Über Schnittstelle, Java-Schnittstelle
Was ich aus der Java-Geldberechnung gelernt habe
Über Java Var
Über Java Literal
Informationen zu Java-Befehlen
Woran ich dachte, als ich anfing, von Java nach Kotlin zu migrieren
Zusammenfassung dessen, was ich über Spring Boot gelernt habe
Was ich in Java gelernt habe (Teil 2) Was sind Variablen?
Was ich getan habe, als ich Java zu Kotlin konvertiert habe
Informationen zur Java-Protokollausgabe
Informationen zur Java-Funktionsschnittstelle
Java, über zweidimensionales Array
Über die Klassenteilung (Java)
Über [Java] [StreamAPI] allMatch ()
Informationen zur Java StringBuilder-Klasse
Ich habe zuerst Java touched berührt
[Java] Über Singleton Class
Ich habe zuerst Java touched berührt
Informationen zur Bindung von Java-Methoden
Ich habe zuerst Java touched berührt
[Java] Über anonyme Klassen
Informationen zu Aufteilungsmethoden (Java)
Was ist Java-Kapselung?
[Java Silver] Informationen zur Initialisierung
Was ich gelernt habe ② ~ Mock ~
Informationen zur Java-Array-Liste
Über Java-Polymorphismus super ()
Was ich gelernt habe ~ ~ DJUnit ~
Informationen zur Vererbung (Java Silver)
Informationen zur Java String-Klasse
Informationen zu Java-Zugriffsmodifikatoren
Über Java-Lambda-Ausdrücke
Was ist Java-Technologie?
Ich habe zuerst Java berührt
Informationen zu Java-Einstiegspunkten
Java 10 Docker-Unterstützung