我读了java.base模块的module-info.java文件
从哪里可以接触到新功能?
Java SE Development Kit 9是一个添加了许多功能的版本,而其中一个显著的功能便是Java平台模块系统(JSR 376)。关于它的具体内容可以在许多网站上找到解释,所以我在这里不会详细描述,而是希望通过看一些实例来增进我们对它的理解。
举个例子来说
毫无疑问,随JDK一起提供的源码是最好的选择。在Oracle JDK 9的Windows版本中,默认情况下会放在C:\Program Files\Java\jdk-9.0.1\lib\src.zip中。请解压并进行确认。(与以往不同,源码不再位于lib目录下)
哎呀?很奇怪呢?
在JDK 8之前,src.zip中直接包含了Java包的文件夹,而在JDK 9中,首先有一个模块的文件夹,然后在其下有module-info.java和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>
让我看一眼。
C:\Java\JDKsrc>dir /b 9.0.1\java.activation
com
javax
module-info.java
C:\Java\JDKsrc>
是这种感觉。
嗯,如果这样说的话,那确实是这样的感觉。
我试着阅读一下
不论如何,这是一个新登场的 module-info.java。我们将阅读它。顺便说一句,让我们去看看 java.base 的内容吧。
有类似于API文档一样的注释
在开始处,常常会有一些版权等注释,接着是以 /** 开头的 API 文档形式的注释部分。这里使用了一些以前没有见过的标签。
我会依靠Java平台标准版Javadoc指南第9版来解读其含义。
@index
{@index jrt jrt}
javadoc
ツールによってインデックスされる単語やフレーズを登録する。JDK-8144287@extLink
{@extLink keytool_tool_reference keytool}
外部ドキュメントへの参照。JDK-8178725@provides
@provides java.nio.file.spi.FileSystemProvider
@provides
を使っていることの宣言JDK-8160196@uses
@uses java.lang.System.LoggerFinder
@uses
を使っていることの宣言同上@moduleGraph
@moduleGraph
モジュールのサブグラフJDK-8173303我不确定这是否已经是新增的全部标签,但在java.base的module-info.java中,新增了以下5个标签。
@moduleGraph 是在java.base的API文档中显示的。嗯嗯,我懂了。
剩下的就是模块定义一长串。
exports java.io;
例如,
exports jdk.internal.jmod to
jdk.compiler,
jdk.jlink;
在只有一个导出目标时的情况下。
exports sun.util.resources to jdk.localedata;
exports 的操作可以在 module-info.java 文件的指示中找到并进行总结,很容易理解。
最后
uses sun.util.spi.CalendarProvider;
provides java.nio.file.spi.FileSystemProvider with jdk.internal.jrtfs.JrtFileSystemProvider;
}
我认为通过同一个博客 “Jigsaw使用SPI” 可以了解到使用和提供方面的信息,这样会更加清楚明了。