在groovy中使用grape管理类库依赖
groovy 1.6增加了grape,用于自动管理groovy引用第三方类库的依赖问题。
见:
安装groovy1.6.x以后,可以通过grape命令查看目前缓存的类库情况:
marshal@ubuntu-desktop:~/workspace$ grape list
0 Grape modules cached
0 Grape module versions cached
可以grape命令增加新的类库,比如加入jetty6.1.6嵌入式版本:
grape install org.mortbay.jetty jetty-embedded 6.1.6
执行后,再次执行grape list:
marshal@ubuntu-desktop:~/workspace$ grape list
org.mortbay.jetty jetty-util [6.1.6]
org.mortbay.jetty jetty [6.1.6]
org.mortbay.jetty project [6.1.6]
org.mortbay.jetty jetty-embedded [6.1.6]
org.mortbay.jetty servlet-api-2.5 [6.1.6]
javax.servlet.jsp jsp-api [2.1]
可以看出,获取jetty的同时,会获取和jetty相关的类库。这就比获得groovy所需类库的方法中的方式简便很多。
还可以更方便的Grab注解,将需要类库依赖的部分写到脚本代码里面。这样代码就可以很方便的部署到任何支持groovy脚本的服务器上。
#!/usr/bin/env groovy
import org.mortbay.jetty.Server
import org.mortbay.jetty.servlet.*
import groovy.servlet.*@Grab(group = ‘org.mortbay.jetty’, module = ‘jetty-embedded’, version = ’6.1.6′)
def runServer() {
def server = new Server(9999)
def context = new Context(server, "/", Context.SESSIONS);
context.resourceBase = "."
context.addServlet(GroovyServlet, "*.gsp")
server.start()
}runServer()
上面的脚本,将启动jetty在9999端口,并且支持groovlets,扩展名为gsp,groovlets路径和该脚本一致。比如在该脚本目录下写一个index.gsp文件:
println ‘test’
就可以通过:
访问到。
这些grape缓存的jar文件,都存放在这里:
marshal@ubuntu-desktop:~$ ls .groovy/grapes/
com.sun.jdmk javax.jms javax.servlet.jsp
com.sun.jmx javax.mail log4j
javax.activation javax.servlet org.mortbay.jetty
实际上grape/grabe使用的是ant ivy来自动获取类库,而ivy是使用了maven结构的类库资源库(repository)机制。因此,grape可以很好的和maven配合,使用maven的本地缓存资源库。
需要在~/.groovy目录下创建一个文件grapeConfig.xml,内容是:
<?xml version="1.0"?>
<ivysettings>
<settings defaultResolver="downloadGrapes"/>
<resolvers>
<chain name="downloadGrapes">
<!– todo add ‘endorsed groovy extensions’ resolver here –>
<ibiblio name="local" root="file:${user.home}/.m2/repository/" m2compatible="true"/>
<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>
<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"/>
</chain>
</resolvers>
</ivysettings>
然后比如执行:
grape install org.apache.activemq activemq-core 5.3.0
因为activemq我已经在maven项目中使用,因此maven本地缓存中有。看到的提示是:
marshal@ubuntu-desktop:~$ grape install org.apache.activemq activemq-core 5.3.0
:: loading settings :: url = jar:file:/opt/groovy-1.6.5/lib/ivy-2.1.0-rc2.jar!/org/apache/ivy/core/settings/ivysettings.xml
:: resolving dependencies :: caller#all-caller;working
confs: [default]
found org.apache.activemq#activemq-core;5.3.0 in local
found commons-logging#commons-logging-api;1.1 in local
在本地发现类库文件,因此说明grape使用到了maven的本地库。
这篇文章上的评论的 RSS feed TrackBack URI