随着Java 9的出现,我认为将我的一些项目移植到Java 9是一个很好的学习练习.在我的一个项目中,我有rxjava和rxjavafx的依赖项
dependencies {
compile 'io.reactivex:rxjava:1.2.6'
compile 'io.reactivex:rxjavafx:1.0.0'
...
}
Run Code Online (Sandbox Code Playgroud)
我想将此项目创建为命名模块.要做到这一点,我需要创建一个module-info.java文件,我需要指定的要求rxjava,并rxjavafx在这里.但是,这些库还没有任何模块信息.
为了解决这个问题,我读过我需要创建自动模块.根据我的理解,我需要重命名rxjava和rxjavafx罐子有一个简单的名称,然后列出--module-path参数中的罐子.然后requires我module-info.java在jar中添加一个指令.
module com.foo.bar {
requires rxjavafx;
requires rxjava;
}
Run Code Online (Sandbox Code Playgroud)
我编写了一个gradle任务来为我编辑jar名称,它似乎在大多数情况下都有效.它需要编译所有的jar并将它们重命名为不包含version-info或slashes.然后将这些文件连接成一个:单独的字符串:
tasks.withType(JavaCompile) {
delete { delete '/tmp/gradle' }
copy {
from configurations.compile + configurations.testCompile
into '/tmp/gradle'
rename '(.*)-[0-9]+\\..*.jar', '$1.jar'
rename { String fileName -> fileName.replace("-", "") }
}
options.compilerArgs += ['--module-path', fileTree(dir: '/tmp/gradle', include: …Run Code Online (Sandbox Code Playgroud) 在stackoverflow上多次提到自动模块,但我找不到自动模块的完整,简洁和自给自足的定义.
那么,什么是自动模块?它是否导出所有包裹?它打开所有包裹吗?它是否读取所有其他模块?