4.7.2 Dependency Repositories 2.3.8

See the light - agile, industrial strength, rapid web application development made easy

(Quick Reference) # 4.7.2 Dependency Repositories - Reference Documentation Authors: Graeme Rocher, Peter Ledbrook, Marc Palmer, Jeff Brown, Luke Daley, Burt Beckwith, Lari Hotari Version: 2.3.8 ## 4.7.2 Dependency Repositories #### Remote Repositories Initially your BuildConfig.groovy does not use any remote public Maven repositories. There is a default `grailsHome()` repository that will locate the JAR files Grails needs from your Grails installation. To use a public repository, specify it in the `repositories` block:
    repositories {
        mavenCentral()
    }
In this case the default public Maven repository is specified. You can also specify a specific Maven repository to use by URL:
    repositories {
        mavenRepo "http://repository.codehaus.org"
    }
and even give it a name:
    repositories {
        mavenRepo name: "Codehaus", root: "http://repository.codehaus.org"
    }
so that you can easily identify it in logs. #### Controlling Repositories Inherited from Plugins A plugin you have installed may define a reference to a remote repository just as an application can. By default your application will inherit this repository definition when you install the plugin. If you do not wish to inherit repository definitions from plugins then you can disable repository inheritance:
    repositories {
        inherit false
    }
In this case your application will not inherit any repository definitions from plugins and it is down to you to provide appropriate (possibly internal) repository definitions. #### Offline Mode There are times when it is not desirable to connect to any remote repositories (whilst working on the train for example!). In this case you can use the `offline` flag to execute Grails commands and Grails will not connect to any remote repositories:
    grails --offline run-app
Note that this command will fail if you do not have the necessary dependencies in your local Ivy cache You can also globally configure offline mode by setting `grails.offline.mode` to `true` in `~/.grails/settings.groovy` or in your project's `BuildConfig.groovy` file:
    grails.offline.mode=true
#### Local Resolvers If you do not wish to use a public Maven repository you can specify a flat file repository:
    repositories {
        flatDir name:'myRepo', dirs:'/path/to/repo'
    }
Aether does not support the `flatDir` resolver or any custom file system resolvers. The above feature works only if you are using the Ivy dependency manager. To specify your local Maven cache (`~/.m2/repository`) as a repository:
    repositories {
        mavenLocal()
    }
#### Custom Resolvers If you are using the Ivy dependency manager (Aether does not support custom resolvers), then you can explicitly specify an Ivy resolver:

    /*
     * Configure our resolver.
     */
    def libResolver = new org.apache.ivy.plugins.resolver.URLResolver()
    ['libraries', 'builds'].each {    libResolver.addArtifactPattern(
                "http://my.repository/${it}/" +
                "[organisation]/[module]/[revision]/[type]s/[artifact].[ext]")    libResolver.addIvyPattern(
                "http://my.repository/${it}/" +
                "[organisation]/[module]/[revision]/[type]s/[artifact].[ext]")
    }libResolver.name = "my-repository"
    libResolver.settings = ivySettingsresolver libResolver
It's also possible to pull dependencies from a repository using SSH. Ivy comes with a dedicated resolver that you can configure and include in your project like so:

    import org.apache.ivy.plugins.resolver.SshResolver
    …
    repositories {
        ...    def sshResolver = new SshResolver(
                name: "myRepo",
                user: "username",
                host: "dev.x.com",
                keyFile: new File("/home/username/.ssh/id_rsa"),
                m2compatible: true)    sshResolver.addArtifactPattern(
                "/home/grails/repo/[organisation]/[artifact]/" +
                "[revision]/[artifact]-[revision].[ext]")    sshResolver.latestStrategy =
                new org.apache.ivy.plugins.latest.LatestTimeStrategy()    sshResolver.changingPattern = ".*SNAPSHOT"    sshResolver.setCheckmodified(true)    resolver sshResolver
    }
Download the JSch JAR and add it to Grails' classpath to use the SSH resolver. You can do this by passing the path in the Grails command line:
    grails -classpath /path/to/jsch compile|run-app|etc.
You can also add its path to the `CLASSPATH` environment variable but be aware this it affects many Java applications. An alternative on Unix is to create an alias for `grails -classpath ...` so that you don't have to type the extra arguments each time. #### Authentication If your repository requires authentication you can configure this using a `credentials` block:
    credentials {
        realm = ".."
        host = "localhost"
        username = "myuser"
        password = "mypass"
    }
This can be placed in your `USER_HOME/.grails/settings.groovy` file using the `grails.project.ivy.authentication` setting:
    grails.project.ivy.authentication = {
        credentials {
            realm = ".."
            host = "localhost"
            username = "myuser"
            password = "mypass"
        }
    }
| Quick Reference (hide)