Ich habe module-info.java in java.base gelesen

Wo Sie die neuen Funktionen berühren können

Java SE Development Kit 9 hat so viele Funktionen hinzugefügt, aber die größte ist Java Platform Module System (JSR 376). .. Da es auf verschiedenen Seiten erklärt wird [^ 1], werde ich hier nicht beschreiben, wie dies ist, aber ich möchte mein Verständnis vertiefen, während ich mir aktuelle Beispiele anschaue.

[^ 1]: Als Beispiel → https://www.slideshare.net/skrb/introduction-of-project-jigsaw

Apropos Beispiele

Immerhin ist die mit JDK gelieferte Quelle die beste. In der Windows-Version von Oracle JDK 9 scheint es sich standardmäßig in "C: \ Programme \ Java \ jdk-9.0.1 \ lib \ src.zip" zu befinden. Erweitern Sie dies, um zu sehen. (Früher war es nicht unter "lib", also wurde es geändert)

Das? Ist es nicht lustig

Bis zu JDK 8 hatte der Inhalt von "src.zip" plötzlich einen Ordner mit Java-Paketen, aber in JDK 9 gibt es zuerst einen Ordner mit Modulen und darunter einen Ordner mit "module-info.java" und Java-Paketen.

C:\Java\JDKsrc>dir /b 1.8.0_131
com
java
javax
launcher
org

C:\Java\JDKsrc>dir /b 9.0.1
java.activation
java.base
java.compiler
java.corba
java.datatransfer
java.desktop
java.instrument
java.logging
java.management
java.management.rmi
java.naming
java.prefs
java.rmi
java.scripting
java.se
java.se.ee
java.security.jgss
java.security.sasl
java.smartcardio
java.sql
java.sql.rowset
java.transaction
java.xml
java.xml.bind
java.xml.crypto
java.xml.ws
java.xml.ws.annotation
javafx.base
javafx.controls
javafx.fxml
javafx.graphics
javafx.media
javafx.swing
javafx.web
jdk.accessibility
jdk.attach
jdk.charsets
jdk.compiler
jdk.crypto.cryptoki
jdk.crypto.ec
jdk.crypto.mscapi
jdk.dynalink
jdk.editpad
jdk.hotspot.agent
jdk.httpserver
jdk.incubator.httpclient
jdk.internal.ed
jdk.internal.jvmstat
jdk.internal.le
jdk.internal.opt
jdk.internal.vm.ci
jdk.jartool
jdk.javadoc
jdk.jcmd
jdk.jconsole
jdk.jdeps
jdk.jdi
jdk.jdwp.agent
jdk.jlink
jdk.jshell
jdk.jsobject
jdk.jstatd
jdk.localedata
jdk.management
jdk.management.agent
jdk.naming.dns
jdk.naming.rmi
jdk.net
jdk.pack
jdk.packager
jdk.packager.services
jdk.policytool
jdk.rmic
jdk.scripting.nashorn
jdk.scripting.nashorn.shell
jdk.sctp
jdk.security.auth
jdk.security.jgss
jdk.unsupported
jdk.xml.bind
jdk.xml.dom
jdk.xml.ws
jdk.zipfs

C:\Java\JDKsrc>

Schauen wir uns einen an.

C:\Java\JDKsrc>dir /b 9.0.1\java.activation
com
javax
module-info.java

C:\Java\JDKsrc>

Es ist so.

Nun, je mehr ich es sage (je mehr ich es öffne), desto mehr fühle ich mich.

Versuche zu lesen

Auf jeden Fall wird es das neue module-info.java sein. Ich werde das lesen. Da es eine große Sache ist, schauen wir uns die in java.base an.

Es gibt Kommentare wie API-Dokumentation

Der erste ist ein Kommentar wie das übliche Copyright, und dann gibt es einen Kommentarteil, der wie das API-Dokument mit / ** beginnt. In diesem wird ein Tag verwendet, das ich noch nie gesehen habe.

Sie können sich auf Java Platform, Standard Edition Javadoc Guide Release 9 verlassen, um die Bedeutung zu verstehen.

Etikett Konkretes Beispiel Bedeutung JDK Bug System
@index {@index jrt jrt} javadocRegistrieren Sie Wörter und Phrasen, die vom Tool indiziert werden. JDK-8144287
@extLink {@extLink keytool_tool_reference keytool} Verweis auf externe Dokumentation. JDK-8178725
@provides @provides java.nio.file.spi.FileSystemProvider @providesVerwendungserklärung JDK-8160196
@uses @uses java.lang.System.LoggerFinder @usesVerwendungserklärung Das gleiche wie oben
@moduleGraph @moduleGraph Moduluntergraph JDK-8173303

Ich weiß nicht, ob dies alle neu hinzugefügten Tags sind, aber dies sind die 5 neuesten in module-info.java von java.base. @ moduleGraph wird in [java.base API-Dokumentation] angezeigt (https://docs.oracle.com/javase/9/docs/api/java.base-summary.html). Hmmmmmm ich verstehe.

Danach befindet sich die Moduldefinition in einer Reihe

    exports java.io;

Und,

    exports jdk.internal.jmod to
        jdk.compiler,
        jdk.jlink;

Ich fühle mich so. export Wenn es nur ein Ziel gibt

    exports sun.util.resources to jdk.localedata;

Es scheint, dass es in einer Zeile wie geschrieben ist. In Bezug auf die Funktionsweise von "Exporten" ist Zusammenfassung der Anweisungen von module-info.java leicht zu verstehen.

Am Ende

    uses sun.util.spi.CalendarProvider;
    provides java.nio.file.spi.FileSystemProvider with jdk.internal.jrtfs.JrtFileSystemProvider;
}

Es endet mit. Sie können das gleiche Blog Verwenden von SPI mit Jigsaw für "Verwendungen" und "Anbieter" leicht verstehen.

Recommended Posts

Ich habe module-info.java in java.base gelesen
Lesen Sie JSON in Java
Lesen Sie Binärdateien in Java 1
Ich kann es lesen! RxJava
Ich habe ein Roulette in Java gemacht.
Ich blieb in File stecken
Lesen Sie die Standardeingabe in Java
Lesen Sie Binärdateien in Java 2
Ich habe das Kotlin-Startbuch gelesen
Ich habe versucht, node-jt400 (IFS lesen)
Ich habe versucht, Metaprogrammierung mit Java
Ich habe an Kubernetes Internal # 2 teilgenommen
Ich las "7 Entwurfsmuster zum Refaktorieren von MVC-Komponenten in Schienen" (Schreiben)
Ich habe eine E-Mail in Java gesendet
Einfaches Lesen von Textdateien in Java (Java 11 & Java 7)
Lesen Sie die Java-Eigenschaftendatei in C #
Ich habe am JJUG CCC 2019 Spring teilgenommen
Ich habe die Quelle von ArrayList gelesen, die ich gelesen habe
Lesen Sie CSV in Java (Super CSV Annotation)
Ich habe die Quelle von Integer gelesen
Ich habe Gordobachs Theorem in Java geschrieben
Ich habe versucht, Domino11 in CentOS7 zu integrieren
Ich habe die Quelle von Long gelesen
Ich habe am JJUG CCC 2019 Herbst teilgenommen
Ich habe eine Anmerkung in Java gemacht.
Ich habe versucht, JWT in Java zu verwenden
Ich habe die Quelle von Short gelesen
Ich habe die Quelle von Byte gelesen
Ich habe die Quelle von String gelesen
Ich habe am JJUG CCC 2019 Herbst teilgenommen.