You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Groovy脚本配置Nexus3 LDAP遇类解析错误,求解决办法

Nexus OSS 3.42.0-01 Groovy脚本配置LDAP类无法解析问题解决

问题描述

安装Sonatype Nexus OSS 3.42.0-01后,尝试通过Groovy脚本自动化配置LDAP,编写的脚本如下:

import org.sonatype.nexus.ldap.persist.LdapConfigurationManager
import org.sonatype.nexus.ldap.persist.entity.LdapConfiguration
import org.sonatype.nexus.ldap.persist.entity.Connection
import org.sonatype.nexus.ldap.persist.entity.Mapping

def ldapConfigMgr = container.lookup(LdapConfigurationManager.class.getName());
def ldapConfig = new LdapConfiguration()

ldapConfig.setName("MYLDAP")

// Connection
connection = new Connection()
connection.setHost(new Connection.Host(Connection.Protocol.valueOf("ldaps"), "192.168.10.100", Integer.valueOf("636")))
connection.setAuthScheme("simple")
connection.setSystemUsername("uid=appauth,ou=auth,ou=nexus_cicd,ou=Applications,dc=my,dc=domain,dc=local")
connection.setSystemPassword("***********")
connection.setSearchBase("dc=my,dc=domain,dc=local")
connection.setConnectionTimeout(30)
connection.setConnectionRetryDelay(300)
connection.setMaxIncidentsCount(3)
connection.setUseTrustStore(Boolean.valueOf("False"))
ldapConfig.setConnection(connection)


// Mapping
mapping = new Mapping()
mapping.setUserBaseDn("ou=People")
mapping.setLdapFilter("")
mapping.setUserObjectClass("InetOrgPerson")
mapping.setUserIdAttribute("uid")
mapping.setUserRealNameAttribute("cn")
mapping.setEmailAddressAttribute("mail")

// MStatic Mapping
mapping.setLdapGroupsAsRoles(true)
mapping.setGroupBaseDn("ou=groups,ou=nexus_cicd,ou=Apllications")
mapping.setGroupObjectClass("groupOfNames")
mapping.setGroupIdAttribute("cn")
mapping.setGroupMemberAttribute("member")
mapping.setGroupMemberFormat("uid=${username},ou=People,dc=my,dc=domain,dc=local")

mapping.setUserSubtree("True")
mapping.setGroupSubtree("False")

ldapConfig.setMapping(mapping)

ldapConfigMgr.addLdapServerConfiguration(ldapConfig)

直接在系统环境运行脚本时,收到类无法解析错误:

# groovy /tmp/script/ldap.groovy
org.codehaus.groovy.control.MultipleCompilationErrorsException: startup failed:
/tmp/script/ldap.groovy: 3: unable to resolve class org.sonatype.nexus.ldap.persist.entity.Connection
 @ line 3, column 1.
   import org.sonatype.nexus.ldap.persist.entity.Connection
   ^

/tmp/script/ldap.groovy: 1: unable to resolve class org.sonatype.nexus.ldap.persist.LdapConfigurationManager
 @ line 1, column 1.
   import org.sonatype.nexus.ldap.persist.LdapConfigurationManager
   ^

/tmp/script/ldap.groovy: 2: unable to resolve class org.sonatype.nexus.ldap.persist.entity.LdapConfiguration
 @ line 2, column 1.
   import org.sonatype.nexus.ldap.persist.entity.LdapConfiguration
   ^

/tmp/script/ldap.groovy: 4: unable to resolve class org.sonatype.nexus.ldap.persist.entity.Mapping
 @ line 4, column 1.
   import org.sonatype.nexus.ldap.persist.entity.Mapping
   ^

/tmp/script/ldap.groovy: 16: unable to resolve class Connection.Host
 @ line 16, column 20.
   connection.setHost(new Connection.Host(Connection.Protocol.valueOf("ldaps"), "10.234.254.9", Integer.valueOf("636")))
                      ^
5 errors

核心原因

直接在系统Groovy环境运行脚本,无法访问Nexus内部的LDAP私有类——这些类仅存在于Nexus的运行时类路径中,系统Groovy默认无法加载。

解决步骤

1. 使用Nexus内置脚本控制台执行

Nexus官方提供了内置的脚本管理控制台(访问路径:http://你的Nexus地址/#admin/system/scripts),在这里创建Groovy脚本并执行,Nexus会自动加载内部类路径,无需手动处理Jar包,这是最安全可靠的方式。

2. 修正脚本中的错误

原脚本存在变量声明、拼写、语法冗余等问题,修正后的可用版本如下:

import org.sonatype.nexus.ldap.persist.LdapConfigurationManager
import org.sonatype.nexus.ldap.persist.entity.LdapConfiguration
import org.sonatype.nexus.ldap.persist.entity.Connection
import org.sonatype.nexus.ldap.persist.entity.Mapping

def ldapConfigMgr = container.lookup(LdapConfigurationManager.class.getName());
def ldapConfig = new LdapConfiguration()

ldapConfig.setName("MYLDAP")

// Connection配置
def connection = new Connection()
connection.setHost(new Connection.Host(Connection.Protocol.LDAPS, "192.168.10.100", 636))
connection.setAuthScheme("simple")
connection.setSystemUsername("uid=appauth,ou=auth,ou=nexus_cicd,ou=Applications,dc=my,dc=domain,dc=local")
connection.setSystemPassword("***********")
connection.setSearchBase("dc=my,dc=domain,dc=local")
connection.setConnectionTimeout(30)
connection.setConnectionRetryDelay(300)
connection.setMaxIncidentsCount(3)
connection.setUseTrustStore(false)
ldapConfig.setConnection(connection)

// 用户与组映射配置
def mapping = new Mapping()
mapping.setUserBaseDn("ou=People")
mapping.setLdapFilter("")
mapping.setUserObjectClass("InetOrgPerson")
mapping.setUserIdAttribute("uid")
mapping.setUserRealNameAttribute("cn")
mapping.setEmailAddressAttribute("mail")

// 组映射配置
mapping.setLdapGroupsAsRoles(true)
mapping.setGroupBaseDn("ou=groups,ou=nexus_cicd,ou=Applications") // 修正拼写错误:Apllications→Applications
mapping.setGroupObjectClass("groupOfNames")
mapping.setGroupIdAttribute("cn")
mapping.setGroupMemberAttribute("member")
mapping.setGroupMemberFormat("uid=${username},ou=People,dc=my,dc=domain,dc=local")

mapping.setUserSubtree(true)
mapping.setGroupSubtree(false)

ldapConfig.setMapping(mapping)

ldapConfigMgr.addLdapServerConfiguration(ldapConfig)

3. Jar包相关说明

Nexus的LDAP相关Jar包位于安装目录的system/org/sonatype/nexus/nexus-ldap-common路径下(如nexus-ldap-common-3.42.0-01.jar),但不建议手动添加到系统Groovy类路径——这种方式依赖Nexus内部类结构,版本变更后极易出错,官方推荐使用内置脚本控制台。

额外建议

  • 执行脚本前,先在Nexus UI中手动配置并测试LDAP连通性,确认服务器地址、账号密码、DN路径等信息正确。
  • 脚本执行后,可在LDAP配置页面查看是否成功创建配置,或通过脚本返回结果验证。

内容的提问来源于stack exchange,提问作者Marco Ferrara

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 08:01:28