One item I have always found a bit confusing is the question of the dependencies closure block vs the plugins closure block.
There are times where I have seen that a library could be specified in either. Also, the version of library would be different.
For example, the following dependencies closure is provided out of the box with Grails 2.1.0:
dependencies { // specify dependencies here under either 'build', 'compile', 'runtime', 'test' or 'provided' scopes eg. // runtime 'mysql:mysql-connector-java:5.1.20' }
Obviously, this leads me to conclude that if I need MySQL Connector/J support, all I have to do is uncomment that line.
However, I have also successfully gotten MySQL Connector/J support by doing the following (I have verified this works):
plugins { compile ":mysql-connectorj:5.1.12" compile ":searchable:0.6.3" build ":tomcat:$grailsVersion" build ":hibernate:$grailsVersion" runtime ":database-migration:1.1" }
I found the following Nabble post from Graeme Rocher explaining the difference of plugins {} vs dependencies {} blocks.
Graeme states:
plugins { } block is used declare dependencies on grails plugins found
in the portal (http://grails.org/plugins/) and built locally.
dependencies { } block is used to declare dependencies on JAR files
and third party java libraries typically found in Maven central (see
http://search.maven.org/#browse)
This made sense to me. What it did not answer is when I am able to obtain a library via either, which is preferable, if there is a "best practices" or "recommended" approach.
Knowing that I can get my MySQL Connector/J library from either one (I am certain I would not want to do both), I would just be curious as to which approach is better.
No comments:
Post a Comment