Sometimes I get the impression that there are many Maven haters in the Groovy/Grails community – now with version 1.2 of the Grails framework they are able to abandon the evil satanic Grails Maven Plugin and embrace the neverending joys of a slim, nice, sexy dependency resolution dsl .. here we go .. lets define some dependencies wheee …
-
Our dependency configuration is defined in grails-app/config/BuildConfig.groovy as a property named grails.project.dependency.resolution:
grails.project.dependency.resolution = { // here will be some dependencies }
-
The default config look like this:
grails.project.dependency.resolution = { inherits "global" // inherit Grails' default dependencies log "warn" // log level of Ivy resolver, either 'error', 'warn', 'info', 'debug' or 'verbose' repositories { grailsHome() // uncomment the below to enable remote dependency resolution // from public Maven repositories //mavenCentral() //mavenRepo "http://snapshots.repository.codehaus.org" //mavenRepo "http://repository.codehaus.org" //mavenRepo "http://download.java.net/maven/2/" //mavenRepo "http://repository.jboss.com/maven2/ } dependencies { // specify dependencies here under either 'build', 'compile', 'runtime', 'test' or 'provided' scopes eg. // runtime 'com.mysql:mysql-connector-java:5.1.5' } }
-
There are currently five scopes supported: build, compile, runtime, test, provided
-
If we want to add a dependency for a scope we can do this using the format <scope> <group>:<name>:<version> e.g.:
compile 'com.mysql:mysql-connector-java:5.1.5'
-
Adding other maven repositories is also possible e.g. for our internal maven repo:
repositories { mavenRepo "http://somesecrethiddenrepositoryneartheamberroom.com" }
-
Often we have some additional linked lib folder we want to add to the repo list:
repositories { flatDir name:'localRepo', dirs:'/var/somerepo' }
-
That’s not all folk! Authentication is another feature that can be configured using the shiny new dsl (example from the Grails docs):
credentials { realm = ".." host = "localhost" username = "myuser" password = "mypass" }
-
Furthermore dependencies are inherited (done by inherit:global), we may define some exclusions here like that:
inherits("global") { excludes "oscache", "ehcache" }
-
Another Feature is the dependency report command – after execution we get some dependency reports in our target/dependency-report directory:
grails dependency-report
Links:
-
Grails Reference Docs: http://grails.org/doc/latest/guide/3.%20Configuration.html#3.7%20Dependency%20Resolution
-
Famous Graeme Rocher: “Grails dependancy resolution done right”
-
Grails Dependency Report Feature: http://grails.org/doc/latest/ref/Command%20Line/dependency-report.html
Conclusion:
sounds nice, nuff’ said :)