Java 9是否可以禁用模块?

17

我使用OSGI,这是我想要禁用模块的主要原因,因为我真的不需要另一个模块框架。是否可以通过命令行选项完成禁用?如果可以,具体操作如何?


泛泛的问题不适合在SO上提问。请考虑更具体一些。 - blurfus
你想禁用模块,但仍然能够使用Java 9中引入的其他功能吗? - syntagma
2
这被Simon在其中一次会议上称为“大杀手开关”,并描述了向后兼容性。 - Naman
@nullpointer 谢谢 - 这是非常有用的信息。但我得到了 Unrecognized option: --permit-illegal-access Error: Could not create the Java Virtual Machine. 这个开关在Java 9中支持吗? - Pavel_K
Java 9通过Jigsaw项目重新设计了整个模块化,对于现有代码您现在不需要过多关注它。之前的一个大问题是无法访问内部Java类,但在“提案(修订版):允许在JDK 9中默认访问内部API”中已作出更改。详情请见:http://mail.openjdk.java.net/pipermail/jigsaw-dev/2017-June/012841.html - Ben Xu
2个回答

12

无法关闭模块系统 - 它将始终处于活动状态。这会影响到访问JDK内部API、依赖Java EE模块、分离包和很多其他小细节。如果您想在Java 9上运行应用程序,您的代码和依赖项必须处理这些迁移挑战。

但是,您不必强制创建模块。您可以完全忽略module-info.java并继续将所有JAR文件放置在类路径中。模块系统将悄无声息地将它们全部捆绑到未命名模块中,该模块旨在实现最大兼容性。您甚至可能都没有注意到模块系统存在(假设您已经克服了我之前描述的挑战)。


1
在Eclipse SWT项目中如何忽略module-info.java? - Steve
我不了解Eclipse SWT的细节,但是一般来说,如果您没有自己创建module-info.java文件,那么您的构建工具应该只使用类路径,其中忽略了所有依赖项中的module-info.class文件。 - Nicolai Parlog
1
我遇到了一个问题,即默认的系统库与这个“未命名”模块中的依赖项发生冲突。 - Cardinal System
@CardinalSystem 我建议你为此开一个新问题(如果你还没有),请随意在这里留下链接,这样我就可以看一下。 - Nicolai Parlog

5

当然可以,正如面试者所说的:

特丽莎·吉:许多人没有意识到,你可以使用Java 9及其所有亮眼的新功能,而不使用Jigsaw,也就是说,您可以在不迁移任何代码的情况下非常愉快地使用Java 9。Java 9中有一些变化(例如隐藏内部API),但理论上,如果您的应用程序一开始就做了所有正确的事情,那么使用Java 9进行编译和运行应该没有问题。

请看完整的采访内容,但是正如您所看到的,我们将有两种Java应用程序类型,一种是模块化世界,另一种是非模块系统,这就是为什么Red HatIBM在此提到的JSR 376投了反对票,但随后他们改变了态度并投了赞成票!

如需了解更多关于Java 9模块系统OSGI的信息,请查看此处

希望这对您有所帮助。


1
+1 对于最初的重要信息。但是我不接受它,因为它没有回答更重要的部分 - “如果是,那么如何?” - Pavel_K
@Pavel_K 这就是我目前所知道的一切,我只是阅读文章和博客,等待最终发布(:- 我认为您需要使用JVM选项来禁用它,更多信息请查看这里 - Anas
简而言之: Java 17中已删除了选项“--illegal-access=permit”。 - wknauf

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接