springframeworkldap核心问题与java模块



主java模块出现了这种问题。

rg.springframework.beans.factory.BeanCreationException:创建在类路径资源[org/springframework/boot/autoconfig/ldap/embedded/EmbeddedLdapAutoConfiguration.class]中定义的名称为"ldapContextSource"的bean时出错:通过工厂方法实例化bean失败;嵌套异常为org.springframework.beans.BeanInstanceException:未能实例化[org.springfframework.ldap.core.support.LdapContextSource]:工厂方法"LdapContextSource"引发异常;嵌套异常为java.lang.IllegalAccessError:类org.springframework.ldap.core.support.AbstractContextSource(在模块spring.ldap.core中)无法访问类com.sun.jndi.ldap.LdapCtxFactory(在模块java.nameing中),因为模块java.name未将com.sun.jndi.ldap导出到模块spring.dap.core在spring.beans@5.2.2.RELEASE/org.springframework.beans.factory.support.ConstrutorResolver.instante(ConstructorResolver.java:656)~[spring-beans-52.RELEASE.jar:na]在spring.beans@5.2.2.RELEASE/org.springframework.beans.factory.support.ConstruorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:636)~[spring-beans-52.RELEASE.jar:na]在spring.beans@5.2.2.RELEASE/org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod在spring.beans@5.2.2.RELEASE/org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance在spring.beans@5.2.2.RELEASE/org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean在spring.beans@5.2.2.RELEASE/org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean在spring.beans@5.2.2.RELEASE/org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:323)~[spring-beans-52.RELEASE.jar:na]在spring.beans@5.2.2.RELEASE/org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222)~[spring-beans-52.RELEASE.jar:na]在spring.beans@5.2.2.RELEASE/org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:321)~[spring-beans-52.2.2RELEASE.jar:na]在spring.beans@5.2.2.RELEASE/org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:202)~[spring-beans-52.2.2RELEASE.jar:na]在spring.beans@5.2.2.RELEASE/org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:879)~[spring-bans-5..2.2.RELEASE.jar:na]在spring.context@5.2.2.RELEASE/org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:878)~[spring-context-5..2.2.RELEASE.jar:na]在spring.context@5.2.2.RELEASE/org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:550)~[spring-context-5..2.2.RELEASE.jar:na]在spring.boot@2.2.2.RELEASE/org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplication context.java:141)~[spring-boot-2.2.2.RELEASE.jar:na]在spring.boot@2.2.2.RELEASE/org.springframework.boot.SpringApplication.refresh(SpringApplication.java:747)~[spring-boot-2.2.2.RELEASE.jar:na]在spring.boot@2.2.2.RELEASE/org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:397)~[spring-boot-2.2.2.RELEASE.jar:na]在spring.boot@2.2.2.RELEASE/org.springframework.boot.SpringApplication.run(SpringApplication.java:315)~[spring-boot-2.2.2.RELEASE.jar:na]在app.com/test.app.app.main(app.java:9)~[classes/:na]由:org.springframework.beans.BeanInstanceException引起:未能实例化[org.springfframework.ldap.core.support.LdapContextSource]:工厂方法"LdapContextSource"引发异常;嵌套异常为java.lang.IllegalAccessError:类org.springframework.ldap.core.support.AbstractContextSource(在模块spring.ldap.core中)无法访问类com.sun.jndi.ldap.LdapCtxFactory(在模块java.nameing中),因为模块java.name未将com.sun.jndi.ldap导出到模块spring.dap.core在spring.beans@5.2.2.RELEASE/org.springframework.beans.factory.support.SimpleInstantationStrategy.instante(SimpleInstantationStrategy.java:185)~[spring-beans-52.RELEASE.jar:na]在spring.beans@5.2.2.RELEASE/org.springframework.beans.factory.support.ConstrutorResolver.instante(ConstructorResolver.java:651)~[spring-beans-52.RELEASE.jar:na]…省略了17个常用框架由以下原因引起:java.lang.IllegalAccessError:类org.springframework.ldap.core.support.AbstractContextSource(在模块spring.ldap.core中)无法访问类com.sun.jndi.ldap.LdapCtxFactory(在模块java.nameing中),因为模块java.name未将com.sun.jndi.ldap导出到模块spring.dap.core在spring.ldap.core@2.3.2.RELEASE/org.springframework.ldap.core.support.AbstractContextSource.(AbstractContextSource.java:77)~[spring-ldap-core-2.3.2.RELEASE.jar:na]在spring.boot.autoconfigure@2.2.2.RELEASE/org.springframework.boot.autoconfig.ldap.EmbeddedLdapAutoConfiguration.ldapContextSource(EmbeddedLdapAutoConfiguration.java:93)~[spring-boot-autoconfigure-2.2.2.RELEASE.jar:na]位于java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)~[na:na]位于java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)~[na:na]位于java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)~[na:na]位于java.base/java.lang.reflect.Method.ioke(Method.java:566)~[na:na]在spring.beans@5.2.2.RELEASE/org.springframework.beans.factory.support.SimpleInstantationStrategy.instante(SimpleInstantationStrategy.java:154)~[spring-beans-5.4.2.RELEASE.jar:na]…省略了18个常见帧进程已完成,退出代码为1

我知道怎么了,但除了从主模块中删除module-info.java之外,还有什么解决办法吗?

如果您确实理解错误,当它详细读取以下内容时:

模块java.naming不将com.sun.jndi.ldap导出到模块spring.dap.core

然后,您可以为此制定变通方法,通过命令行使用修饰符作为JVM选项来提供访问:

--add-exports java.naming/com.sun.jndi.ldap=spring.ldap.core

我也遇到了同样的问题,但在切换到Java 11后,一切都恢复了正常。

当我想升级到Java17时,也遇到了同样的问题。但是,当我将spring-ldap核心依赖关系更新到最新版本时,它运行良好。

我在运行集成测试时遇到了这个错误。我所要做的就是从Spring自动配置中排除LdabAutoConfiguration.class,如下所示:

@EnableAutoConfiguration(exclude = {LdapAutoConfiguration.class})
class MyApplicationTestIT { ... }

最新更新