当Jigsaw与Java 9一起发布时,这是一个漫长的过程的结尾-它已经被推迟-并且必须被发布。 随着Java 11的到来,即最新的长期支持,我认为现在是对模块化状态进行快照的好时机。
我将使用Java Developer应该知道的前20个库和API作为参考,并检查它们是否为最新版本:
- 提供自动模块名称
- 或具有
module-info
在第一种情况下,JAR具有稳定的模块名称。 它仍然是一个自动模块,但这是进入模块系统的第一步。 在第二种情况下,JAR是完全成熟的模块,因为它完全包含了模块系统。
名称 | 分析版 | 模块名称 | 模块化了吗? |
---|---|---|---|
1.8.0-beta2 | |
| |
2.9.8 | |
| |
2.8.5 |
|
| |
5.3.2 | |
| |
2.23.4 | |
| |
2.0.0-RC.4 |
|
| |
3.8.1 | |
| |
3.6.1 |
|
| |
27.0.1 | |
| |
4.5.6 | |
| |
2.12.0 |
|
| |
1.4.11.1 |
|
| |
2.1.1 |
|
| |
JAXB | 2.3.1 | |
|
4.0.1 |
|
| |
2.6.0 |
|
| |
2.1.1 | |
| |
3.2.0 | |
| |
2.5.0 |
|
| |
5.5.13 |
|
| |
2.3 |
|
| |
4.2 | |
| |
9.2.0 | |
| |
3.1.0 |
|
| |
1.5 |
|
| |
1.11.3 | |
| |
1.11 | |
| |
3.8.1 |
|
| |
3.8.1 |
|
|
上面只有两个库实际上是模块化的! 这是可以理解的,因为在自己的库中实现模块是一项不小的努力。 但是,很多库-大约50%-没有Automatic-Module-Name
,即使:
- 它几乎不花钱
- 最新版本已于2018年发布-Java 9已于2017年9月发布
因此,这使得客户端应用程序/框架/库( 例如 Spring)自身很难模块化。 这让我想知道模块的未来会是什么样。
有趣的是,尽管缺少模块支持,但上述许多库还是OSGI捆绑包(例如ProtoBuf)
翻译自: https://blog.frankel.ch/hard-look-state-java-modularization/