In prepping a talk on GPars, the Groovy concurrency library, I’ve been using Grape for dependency management and I must say it’s mad fun. I’m sure there must be some downside or something complicated about it but I haven’t run into it yet!
To get started, you need to set up your .groovy/grapeConfig.xml. I copied this from the Grape page linked above:
<ivysettings> <settings defaultResolver="downloadGrapes"/> <resolvers> <chain name="downloadGrapes"> <filesystem name="cachedGrapes"> <ivy pattern="${user.home}/.groovy/grapes/[organisation]/[module]/ivy-[revision].xml"/> <artifact pattern="${user.home}/.groovy/grapes/[organisation]/[module]/[type]s/[artifact]-[revision].[ext]"/> </filesystem> <!-- todo add 'endorsed groovy extensions' resolver here --> <ibiblio name="codehaus" root="http://repository.codehaus.org/" m2compatible="true"/> <ibiblio name="ibiblio" m2compatible="true"/> <ibiblio name="java.net2" root="http://download.java.net/maven/2/" m2compatible="true"/> <ibiblio name="jboss" root="http://repository.jboss.org/maven2/" m2compatible="true"/> </chain> </resolvers> </ivysettings>
To use it in groovysh, just do this:
groovy:000> import groovy.grape.Grape ===> [import groovy.grape.Grape] groovy:000> Grape.grab(group:'net.homeip.yusuke', module:'twitter4j', version:'2.0.10') ===> null groovy:000> import twitter4j.Twitter ===> [import groovy.grape.Grape, import twitter4j.Twitter] groovy:000> new Twitter('user', 'password'). updateStatus('holy cow I can tweet from groovysh!')
If you want to use Grape in your app, it’s easy to just add an annotation into the code:
@Grab(group='net.homeip.yusuke', module='twitter4j', version='2.0.10')
In summary, I like the Grape.