Spring boot Java首选项API类加载挑战

Spring boot Java首选项API类加载挑战,spring-boot,classloader,Spring Boot,Classloader,问题: 我在maven jar模块中有一个java.util.prefs的自定义实现。 我将系统属性提供给-djava.util.prefs.PreferencesFactory=com.blah.CustomePrefsFactory 到使用自定义首选项的我的Spring boot应用程序 当Spring boot应用程序第一次使用首选项时,Java.util.Preferences.Java会尝试使用 ClassLoader.getSystemClassLoader 这会导致错误,因为spr

问题:

我在maven jar模块中有一个java.util.prefs的自定义实现。 我将系统属性提供给-djava.util.prefs.PreferencesFactory=com.blah.CustomePrefsFactory 到使用自定义首选项的我的Spring boot应用程序

当Spring boot应用程序第一次使用首选项时,Java.util.Preferences.Java会尝试使用 ClassLoader.getSystemClassLoader

这会导致错误,因为spring boot应用程序的系统类加载程序无法使用嵌套的jar类

有没有办法使嵌套的jar类可供系统类加载器使用?

简单的回答是没有

系统类加载器委托给引导类加载器和扩展类加载器,然后尝试从类路径加载类,而不是从嵌套JAR加载类


您必须实现或使用支持该功能的现有类加载器。

由于Preferences实现最终作为REST服务公开,因此不再需要实现或使用自定义类加载器。