Java 9项目Jigsaw的主要目标之一是实现可靠配置。也就是说,Java 9承诺解决类路径机制的缺陷,该缺陷允许java启动器在运行程序时不确保所有必需的类都可用于加载,在过去会导致java.lang.NoClassDefFoundError错误。
这是通过在module-info.java中声明模块依赖关系以及全新的--module-path选项来实现的。在启动Java应用程序之前,会分析模块图。
然而,我仍然可以做以下操作。
1. 假设我有两个模块com.spacey.explorer和com.spacey.rocket。com.spacey.explorer使用由com.spacey.rocket模块定义和导出的类com.spacey.rocket.RocketZ。编译和JAR两个模块后一切正常运行。
2. 现在,我从com.spacey.rocket模块中删除了com.spacey.rocket.RocketZ类型,然后只重新编译和重新JAR这个模块。
3. 我使用新编译的com.spacey.rocket模块运行先前编译的com.spacey.explorer模块。
4. 我得到... java.lang.NoClassDefFoundError,这可能发生在应用程序运行时间长达4小时后。
有没有一种方法来确保运行Java应用程序时不仅验证模块图(模块路径)的完整性,而且还进行实际类型可访问性的全面检查?
这是通过在module-info.java中声明模块依赖关系以及全新的--module-path选项来实现的。在启动Java应用程序之前,会分析模块图。
然而,我仍然可以做以下操作。
1. 假设我有两个模块com.spacey.explorer和com.spacey.rocket。com.spacey.explorer使用由com.spacey.rocket模块定义和导出的类com.spacey.rocket.RocketZ。编译和JAR两个模块后一切正常运行。
2. 现在,我从com.spacey.rocket模块中删除了com.spacey.rocket.RocketZ类型,然后只重新编译和重新JAR这个模块。
3. 我使用新编译的com.spacey.rocket模块运行先前编译的com.spacey.explorer模块。
4. 我得到... java.lang.NoClassDefFoundError,这可能发生在应用程序运行时间长达4小时后。
有没有一种方法来确保运行Java应用程序时不仅验证模块图(模块路径)的完整性,而且还进行实际类型可访问性的全面检查?
c.s.rocket
中有一个缺失的类,你如何运行新编译的c.s.explorer
呢? - Namanjava --module-path ../jars-dir --module com.spacey.explorer/com.spacey.explorer.MissionApp
。 - malloc4k