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.
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.
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.
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
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.
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.
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
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