尝试使用Spring LDAP进行编码

7

我正在尝试使用Spring LDAP进行编码

<ldap-server ldif="classpath:my-ldap-clone.ldif" />

但是我遇到了这个错误

NoClassDefFoundError: org/apache/directory/server/core/DirectoryService

我做错了什么?

3个回答

13

使用Maven:

    <dependency>
        <groupId>org.apache.directory.server</groupId>
        <artifactId>apacheds-all</artifactId>
        <version>1.5.7</version>
    </dependency>

4
如果你只需要其中一小部分的话,我怀疑添加那个庞大的依赖包(10MB!)是否是一个好主意。例如,spring-security-ldap 只需要5个Jar包,可以在这里查看:http://mvnrepository.com/artifact/org.springframework.security/spring-security-ldap/3.2.3.RELEASE - Charles Morin
我也遇到了同样的错误。虽然我是 Maven 的新手,但依赖项不应该由 Maven 自动下载吗?为什么需要在我的应用程序的 pom.xml 文件中明确指定呢?谢谢! - Tamara Aviv

5
如果您正在使用Maven,则这些实际上来自于spring-security-ldap的可选依赖项。
使用apacheds-all是一个不好的选择,因为它嵌入了许多相当常见的依赖项,例如slf4j和dom4j。您可能会遇到类加载器问题。
相反,您应该查看您正在使用的spring-security-ldap版本的pom文件,查找apacheds可选依赖项,并将它们复制到您的pom中,去掉<scope><optional>元素(不幸的是,在Maven中处理可选依赖项没有更好的方法)。
例如,对于spring-security-ldap 4.2.2,它将给出:
<dependency>
    <groupId>org.apache.directory.server</groupId>
    <artifactId>apacheds-core</artifactId>
    <version>1.5.5</version>
</dependency>
<dependency>
    <groupId>org.apache.directory.server</groupId>
    <artifactId>apacheds-core-entry</artifactId>
    <version>1.5.5</version>
</dependency>
<dependency>
    <groupId>org.apache.directory.server</groupId>
    <artifactId>apacheds-protocol-ldap</artifactId>
    <version>1.5.5</version>
</dependency>
<dependency>
    <groupId>org.apache.directory.server</groupId>
    <artifactId>apacheds-protocol-shared</artifactId>
    <version>1.5.5</version>
</dependency>
<dependency>
    <groupId>org.apache.directory.server</groupId>
    <artifactId>apacheds-server-jndi</artifactId>
    <version>1.5.5</version>
</dependency>

看起来至少自3.2以来它没有改变过。


2
从以下链接下载ApcheDS:http://directory.apache.org/ 或从此处获取完整的jar包。我曾经使用Spring Security 3.0.5与LDAP(Spring LDAP 1.3)一起工作,那时候我没有满足ApacheDS的要求。请检查您的Spring Secuirty版本,它可能依赖于ApacheDS。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接