Java 首选项 API 类加载挑战
Java Preferences API Classloading Challenges
问题:
我在 Maven jar 模块中有一个 java.util.prefs 的自定义实现。
我正在向 -djava.util.prefs.PreferencesFactory=com.blah.CustomePrefsFactory 提供系统 属性
到我的 Spring 使用自定义首选项的启动应用程序。
当 Spring 引导应用程序第一次使用首选项时,Java.util.Preferences.java 尝试使用
ClassLoader.getSystemClassLoader()。
这会导致错误,因为嵌套的 jar classes 不可用于 spring 启动应用程序的系统 class 加载程序。
有没有办法让嵌套的 jar classes 可用于系统 class 加载程序?
简短的回答是否定的。
系统 ClassLoader
委托给 Bootstrap ClassLoader
和扩展 ClassLoader
,然后尝试从类路径加载 类,而不是从嵌套的 JAR 加载。
您必须实施或使用支持该功能的现有 ClassLoader
。
问题:
我在 Maven jar 模块中有一个 java.util.prefs 的自定义实现。 我正在向 -djava.util.prefs.PreferencesFactory=com.blah.CustomePrefsFactory 提供系统 属性 到我的 Spring 使用自定义首选项的启动应用程序。
当 Spring 引导应用程序第一次使用首选项时,Java.util.Preferences.java 尝试使用 ClassLoader.getSystemClassLoader()。
这会导致错误,因为嵌套的 jar classes 不可用于 spring 启动应用程序的系统 class 加载程序。
有没有办法让嵌套的 jar classes 可用于系统 class 加载程序?
简短的回答是否定的。
系统 ClassLoader
委托给 Bootstrap ClassLoader
和扩展 ClassLoader
,然后尝试从类路径加载 类,而不是从嵌套的 JAR 加载。
您必须实施或使用支持该功能的现有 ClassLoader
。