所以我知道,在 Java 9 模块(Project Jigsaw)中,不允许拆分包。也就是说,以下模块不能既导出具有相同名称的包,也不能在运行时同时使用:
模块 1
module com.example.foo {
exports com.example.foo;
}
模块 2
module com.example.foo {
exports com.example.foo;
}
不允许(或者,至少,它们不能同时运行)。但我不清楚子包是如何发挥作用的。如果一个模块导出包com.example.foo
,是否可以导出另一个包com.example.foo.bar
?例如,我想做以下事情:
模块 1
module com.example.foo {
exports com.example.foo;
exports com.example.foo.exceptions;
exports com.example.foo.util;
}
模块 2
module com.example.foo.impl1 {
requires com.example.foo;
exports com.example.foo.impl1;
}
模块 3
module com.example.foo.impl2 {
requires com.example.foo;
exports com.example.foo.impl2;
}
这是允许的吗?所有三个模块都可以在运行时一起使用吗?com.example.foo
或者模块导出这一事实是否会com.example.foo
阻止另一个模块 ( com.example.foo.impl1
) 导出具有子包名称 ( com.example.foo.impl1
) 的包?