Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

What is the correct way to configure grails maven authentication to Artifactory?

What is the correct way to configure authentication to Artifactory using the Maven resolver?

Currently I'm using:

grails.project.ivy.authentication = {
    repositories {
        mavenRepo "http://SERVER:8081/artifactory/remote-repos"

    }
    credentials {
        realm = "Artifactory Realm"
        host = "SERVER"
        username = "USER"
        password = "PASSWORD"
    }
}

grails.project.dependency.resolver = "maven" // or ivy

grails.project.dependency.resolution = {
    // inherit Grails' default dependencies
    inherits("global") {
        // specify dependency exclusions here; for example, uncomment this to disable ehcache:
        // excludes 'ehcache'
    }
    log "warn" // log level of Ivy resolver, either 'error', 'warn', 'info', 'debug' or 'verbose'
    checksums true // Whether to verify checksums on resolve
    legacyResolve false // whether to do a secondary resolve on plugin installation, not advised and here for backwards compatibility

    repositories {
        inherits true // Whether to inherit repository definitions from plugins

//        mavenLocal()

        mavenRepo id: 'Artifactory', url: "http://SERVER:8081/artifactory/remote-repos"

    }

If I change the resolver to "ivy" dependencies are downloaded.

With maven resolver Artifactory request log shows 401 errors

Relevant Grails documentation: http://grails.org/doc/latest/guide/conf.html#dependencyRepositories

Perhaps it has not yet been updated for Maven.

like image 987
Greg Pagendam-Turner Avatar asked May 15 '14 05:05

Greg Pagendam-Turner


2 Answers

Our shop is currently using Grails 2.3.8, and each developer keeps a external build config in our home directory that contains the following:

artifactory.username = 'username'
artifactory.password = 'password'
artifactory.repo = 'http://our.artifactory.server.com:8080/artifactory/central'
artifactory.repositoryLocation = "http://our.artifactory.server.com:8080/artifactory/libs-release-local"

Here is how we configure all of our Grails projects in our BuildConfig.groovy:

def config = new ConfigSlurper(grailsSettings.grailsEnv).parse(new File("$home/my_build_config.groovy").toURI().toURL())

grails.project.dependency.resolver = "maven"

grails.project.dependency.resolution = {

    inherits("global") {
    }

    log "error"
    checksums true
    legacyResolve false

    repositories {

        String artifactoryUrl = config.artifactory.repo
        mavenRepo(artifactoryUrl) {

            auth([
                    username: config.artifactory.username,
                    password: config.artifactory.password
            ])

            updatePolicy "always"
        }
        mavenLocal()
    }

    dependencies {

        // ...
    }

    plugins {

        // ...
    }
}

If that doesn't work, I would suggest looking at the Artifactory permission settings for your virtual repositories and user permissions in general.

like image 100
ZDJ Avatar answered Sep 20 '22 11:09

ZDJ


In BuildConfig.groovy, use:

grails.project.repos.default = "AT"

grails {
    project {
        repos {
            AT {
                url = "http://localhost:8081/artifactory/AT/"
                username = "bob"
                password = "MyUnguessablePassword"
            }
        }
    }
}

The doco is a bit hidden away, see: http://grails-plugins.github.io/grails-release/docs/manual/guide/single.html#repositories

A worked example is at: http://wordpress.transentia.com.au/wordpress/

like image 38
Bob Brown Avatar answered Sep 20 '22 11:09

Bob Brown