J'ai lu module-info.java dans java.base

Où toucher les nouvelles fonctionnalités

Java SE Development Kit 9 a tant de fonctionnalités ajoutées, mais la plus importante est Java Platform Module System (JSR 376). .. Puisqu'il est expliqué sur divers sites [^ 1], je ne décrirai pas ce que c'est ici, mais j'aimerais approfondir ma compréhension en regardant des exemples réels.

[^ 1]: à titre d'exemple → https://www.slideshare.net/skrb/introduction-of-project-jigsaw

En parlant d'exemples

Après tout, la source fournie avec JDK est la meilleure. Dans la version Windows d'Oracle JDK 9, il semble être dans C: \ Program Files \ Java \ jdk-9.0.1 \ lib \ src.zip par défaut. Développez ceci pour voir. (Auparavant, ce n'était pas sous lib, donc il a changé)

Cette? N'est-ce pas drôle?

Jusqu'au JDK 8, le contenu de src.zip avait soudainement un dossier de paquets Java, mais dans JDK 9, il y a d'abord un dossier de modules, et en dessous il y a un dossier de module-info.java et les paquets Java.

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>

Jetons un coup d'œil à un.

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

C:\Java\JDKsrc>

C'est comme ça.

Eh bien, plus je le dis (plus je l'ouvre), plus je ressens.

Essayez de lire

Quoi qu'il en soit, ce sera le nouveau module-info.java. Je vais lire ceci. Puisque c'est un gros problème, jetons un œil à celui de java.base.

Il y a des commentaires comme la documentation de l'API

Le premier est un commentaire tel que le Copyright habituel, puis il y a une partie de commentaire qui commence par / ** comme le document API. En cela, une balise que je n'ai jamais vue auparavant est utilisée.

Vous pouvez vous fier à Java Platform, Standard Edition Javadoc Guide Release 9 pour en comprendre la signification.

marque Exemple concret sens JDK Bug System
@index {@index jrt jrt} javadocEnregistrez les mots et les phrases indexés par l'outil. JDK-8144287
@extLink {@extLink keytool_tool_reference keytool} Référence à la documentation externe. JDK-8178725
@provides @provides java.nio.file.spi.FileSystemProvider @providesDéclaration d'utilisation JDK-8160196
@uses @uses java.lang.System.LoggerFinder @usesDéclaration d'utilisation Comme ci-dessus
@moduleGraph @moduleGraph Sous-graphe du module JDK-8173303

Je ne sais pas si ce sont toutes les balises nouvellement ajoutées, mais ce sont les 5 plus récentes dans module-info.java de java.base. @ moduleGraph s'affiche dans la documentation de l'API java.base. Hmmmmmm je vois.

Après cela, la définition du module est dans une rangée

    exports java.io;

Et,

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

Se sentir comme ça. ʻExport` Lorsqu'il n'y a qu'une seule destination

    exports sun.util.resources to jdk.localedata;

Il semble qu'il soit écrit sur une seule ligne comme. Concernant le fonctionnement des ʻexports`, résumé des directives de module-info.java est facile à comprendre.

À la fin

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

Cela se termine par. Le même blog Utilisation de SPI avec Jigsaw pour «utilise» et «fournit» est facile à comprendre.

Recommended Posts

J'ai lu module-info.java dans java.base
Lire JSON en Java
Lire des fichiers binaires en Java 1
Je peux le lire! RxJava
J'ai fait une roulette à Java.
Je suis resté coincé dans le fichier
Lire l'entrée standard en Java
Lire des fichiers binaires dans Java 2
J'ai lu le livre de démarrage de Kotlin
J'ai essayé node-jt400 (lecture IFS)
J'ai essayé la métaprogrammation avec Java
J'ai participé à Kubernetes Internal # 2
J'ai lu "7 modèles de conception pour refactoriser les composants MVC dans les rails" (écriture)
J'ai envoyé un e-mail en Java
Lisez facilement les fichiers texte en Java (Java 11 et Java 7)
Lire le fichier de propriétés Java en C #
J'ai participé au JJUG CCC 2019 Spring
J'ai lu la source de ArrayList que j'ai lu
Lire CSV en Java (annotation Super CSV)
J'ai lu la source d'Integer
J'ai écrit le théorème de Gordobach en java
J'ai essayé de mettre Domino11 dans CentOS7
J'ai lu la source de Long
J'ai participé au JJUG CCC 2019 automne
J'ai fait une annotation en Java.
J'ai essayé d'utiliser JWT en Java
J'ai lu la source de Short
J'ai lu la source de Byte
J'ai lu la source de String
J'ai participé au JJUG CCC 2019 Fall.