Java 9中的可靠配置
Java9中Jigsaw项目的主要目标之一是可靠的配置。也就是说,Java 9承诺解决类路径机制缺陷,该缺陷允许Java启动器运行程序,而不确保所有必要的类都可以在运行时加载,这通常会导致Java 9中的可靠配置,java,java-9,Java,Java 9,Java9中Jigsaw项目的主要目标之一是可靠的配置。也就是说,Java 9承诺解决类路径机制缺陷,该缺陷允许Java启动器运行程序,而不确保所有必要的类都可以在运行时加载,这通常会导致Java.lang.NoClassDefFoundErrors 这是通过在module info.java中声明模块依赖项和全新的--module path选项来实现的。在启动Java应用程序之前,将分析模块图 然而,我仍然可以做到以下几点 假设我有两个模块com.spacey.explorer和com.spa
Java.lang.NoClassDefFoundError
s
这是通过在module info.java
中声明模块依赖项和全新的--module path
选项来实现的。在启动Java应用程序之前,将分析模块图
然而,我仍然可以做到以下几点
com.spacey.explorer
和com.spacey.rocket
com.spacey.explorer
使用由com.spacey.rocket
模块定义和导出的类com.spacey.rocket.RocketZ
。编译和JARing这两个模块后,一切都正常运行com.spacey.rocket
模块中删除com.spacey.rocket.RocketZ
类型,并仅重新编译和重新JAR这个模块com.spacey.rocket
模块运行以前编译的com.spacey.explorer
模块java.lang.NoClassDefFoundError
,这在应用程序正常运行大约4小时后可能发生$ jdeps -R --module-path jars-dir -m com.spacey.explorer
> com.spacey.explorer -> com.spacey.rocket not found
我认为另一个答案在技术方面有所帮助,但除此之外,我认为你对可靠部分的理解有点错误 讨论脆性类路径: 所有这些都是脆弱类路径的结果。这意味着类加载器没有一个好的机制来区分一个加载的类和另一个同名的类,或者将一个类加载器加载的类与另一个类加载的类隔离开来 模块对此给出的答案是: Java模块将提供可靠的配置和强大的封装。如果您有不兼容,您将在构建时发现这些不兼容,而不是在应用程序开始在生产环境中运行后的某个不确定的时间 换句话说:我认为你认为模块是为了防止各种错误而设计的,这是一种误解。模块使您更容易构建东西。您发现了一个很好的示例,它不一定会转化为关于运行时问题的完美安全网
换句话说:您对“可靠模块”的解释与Jigsaw项目实际提供的“可靠模块”承诺不同步。否。模块系统从不检查类。您能详细说明(3)的含义吗。如果新编译的
c.s.rocket
中缺少类,如何运行c.s.explorer
。@nullpointer与(1)java--module path../jars dir--module com.spacey.explorer/com.spacey.explorer.MissionApp
中的内容完全相同,实际上jdeps可以完成这项工作。还值得添加-verbose:class
选项,以获得更多信息(类级)输出。