Java 9中的可靠配置

mal*_*c4k 4 java java-9

Java 9中项目Jigsaw的主要目标之一是可靠的配置.也就是说,Java 9承诺解决类路径机制缺陷,它允许java启动程序运行程序,而不确保在运行时加载所有必需的类,这曾经导致java.lang.NoClassDefFoundErrors.

这是module-info.java通过在全新--module-path选项中声明模块依赖性来完成的.在启动Java应用程序之前分析模块图.

但是,我仍然可以做到以下几点.

  1. 可以说我有两个模块com.spacey.explorercom.spacey.rocket. com.spacey.explorer使用com.spacey.rocket.RocketZcom.spacey.rocket模块定义和导出的类.编译和JARing两个模块后,一切正常运行.
  2. 现在我com.spacey.rocket.RocketZcom.spacey.rocket模块中删除类型并重新编译并重新JAR只有这一个模块.
  3. com.spacey.explorer使用新编译的com.spacey.rocket模块运行以前编译的模块.
  4. 我得到...... java.lang.NoClassDefFoundError,这可能是在4小时的应用程序正常运行时间之后.

有没有办法真正确保在运行Java应用程序时不仅验证了模块图(模块路径)的完整性,而且还完成了对实际类型可访问性的全面检查?

Nic*_*lai 5

有没有办法真正确保在运行Java应用程序时不仅验证了模块图(模块路径)的完整性,而且还完成了对实际类型可访问性的全面检查?

不在JVM中,没有.该模块系统运行在伪像的级别,是幸福的,如果一个神器自称是正确的模块存在.除此之外,不再进行进一步的检查.

也就是说,JDeps应该能够帮助你.它分析您的项目及其依赖项,并在各个类的级别上运行.它将指出无法找到的依赖项.

在你的例子中:

$ jdeps -R --module-path jars-dir -m com.spacey.explorer

> com.spacey.explorer    -> com.spacey.rocket    not found
Run Code Online (Sandbox Code Playgroud)