JPAnderson JPAnderson - 1 year ago 102
Groovy Question

Nexus3 Configure LDAP with API

I'm currently trying to write a script to configure LDAP on my Nexus 3 instance. I've taken a look at this post and i'm running into some errors and I think it's just me not understanding Groovy that well.

Here's what I've tried.

import groovy.json.JsonSlurper

def ldap = new JsonSlurper().parseText(args)
def manager = container.lookup(

new LdapConfiguration(
connection: new Connection(
host: new Connection.Host(Connection.Protocol.ldap,, ldap.port),
maxIncidentsCount: 3,
connectionRetryDelay: 300,
connectionTimeout: 15,
searchBase: 'dc=example,dc=com',
authScheme: 'simple',
systemPassword: 'systemPassword',
systemUsername: 'systemUsername'
mapping: new Mapping(
ldapGroupsAsRoles: true,
emailAddressAttribute: 'mail',
userIdAttribute: 'sAMAccountName',
userMemberOfAttribute: 'memberOf',
userObjectClass: 'user',
userPasswordAttribute: 'userPassword',
userRealNameAttribute: 'cn',
userBaseDn: '(memberof:1.2.840.113556.1.4.1941:=cn=Devs,ou=someOU,ou=anotherOU,dc=example,dc=com'

When i use the script provided in the complex-script examples I get:

"name" : "ldapConfig",
"result" : "org.codehaus.groovy.control.MultipleCompilationErrorsException: startup failed:\n
Script8.groovy: 10: unable to resolve class ldapConfiguration \n
@ line 10, column 3.\n new ldapConfiguration(\n^\n\n1 error\n"

It really bothers me it can't resolve the class...
Now, I'm not sure how to provide the JSON object for args. I've instead tried to put a JSON block directly into JsonSlurper().parseText() like this:

ldap = new JsonSlurper().parseText('{"host: localhost", "port: 389"}')

This produces same error as above.

Here is a snippet from the is where invoke the addUpdateScript.groovy script.


# A simple example script that publishes a number of scripts to the Nexus Repository Manager
# and executes them.

# fail if anything errors
set -e
# fail if a function call is missing an argument
set -u


# add the context if you are not using the root context

# add a script to the repository manager and run it
function addAndRunScript {
# using grape config that points to local Maven repo and Central Repository , default grape config fails on some downloads although artifacts are in Central
# change the grapeConfig file to point to your repository manager, if you are already running one in your organization
groovy -Dgrape.config=grapeConfig.xml addUpdatescript.groovy -u "$username" -p "$password" -n "$name" -f "$file" -h "$host"
printf "\nPublished $file as $name\n\n"
curl -v -X POST -u $username:$password --header "Content-Type: text/plain" "$host/service/siesta/rest/v1/script/$name/run"
curl -v -X GET -u $username:$password "$host/service/siesta/rest/v1/script/$name"
printf "\nSuccessfully executed $name script\n\n\n"

printf "Provisioning Integration API Scripts Starting \n\n"
printf "Publishing and executing on $host\n"

addAndRunScript ldapConfig ldapConfig.groovy

Am I using the wrong class name? LdapConfiguration. When I loaded this into IntelliJ I found ldapConfig but it didn't work either. Not sure how to dig into the javadoc to get more details out of the libraries.

Answer Source

I believe you have

new ldapConfiguration(

Where you need to have

new LdapConfiguration(

On line 10 of your script