Chinaunix首页 | 论坛 | 博客
  • 博客访问: 30391929
  • 博文数量: 708
  • 博客积分: 12163
  • 博客等级: 上将
  • 技术积分: 8240
  • 用 户 组: 普通用户
  • 注册时间: 2007-12-04 20:59
文章分类

全部博文(708)

分类: Java

2009-11-18 10:19:39

Ivy是一个免费基于Java的依赖管理器。它提供了一些强大的功能包括依赖传递,ant集成, maven存储库兼容,持续集成,html报告等

下载ivy 2.0 ,校内镜像:

下载好后安装它,把它解压到f:/ivy-2.0.0(把此目录认为是IVY_HOME),把IVY_HOME/ivy-2.0.0.jar放到ANT_HOME/lib目录下。然后命令行入到IVY_HOME/src/example/hello-ivy目录,运行ant。然后它会下载依赖的所有jar包。

看下hello-ivy的依赖配置:

  1. <ivy-module version="2.0">  
  2.     <info organisation="org.apache" module="hello-ivy"/>  
  3.     <dependencies>  
  4.         <dependency org="commons-lang" name="commons-lang" rev="2.0"/>  
  5.         <dependency org="commons-cli" name="commons-cli" rev="1.0"/>  
  6.     dependencies>  
  7. ivy-module>  

依赖commons-lang-2.0.jar 和 commons-cli-1.0.jar,ivy会自动下载,当然还有这些*.jar所依赖的jar, 如这里的commons-cli-1.0.jar依赖commons-logging-1.0.jar,不用在ivy.xml文件定义。它们已经在lib目录下了。

然后你再一次运行ant,ivy不会再下载这些jar,因为本地有缓存了。

当然也可以用ant report任务,输出jar依赖报告,默认在build目录,org.apache-hello-ivy-default.html。

延伸:默认缓存目录为${user.home}/cache。你也可以改它的默认目录在运行ant时,设置,如ivy.default.ivy.user.dir=f:/ivy2,所以它会缓存到f:/ivy2/cache

简单记录下,我使用ivy的步骤。

在 ivy 中,配置(conf)是比较重要的概念,它对应一组依赖的jar。比较一个编译期间的conf(compile),它依赖commons-lang。运行期间它还要依赖log4j,可以定义一个运行期配置(runtime),它扩展compile。配置是可以扩展的,依次类推,可以定义一个测试用的jar依赖配置(test),它扩展runtime。

ivy的jar依赖配置在ivy.xml文件里定义与说明,类似:

  1. <ivy-module version="1.0">  
  2.     <info organisation="com.chenlb" module="ivy-hello"/>  
  3.   
  4.     <configurations>  
  5.         <conf name="compile" visibility="private" description="compilation only need jar" />  
  6.         <conf name="runtime" visibility="private" extends="compile" description="for runtime need jar" />  
  7.         <conf name="test" visibility="private" extends="runtime" description="for test" />  
  8.         <conf name="default" visibility="public" extends="runtime" description="default jar" />  
  9.     configurations>  
  10.     <dependencies>  
  11.         <dependency org="commons-lang" name="commons-lang" rev="2.1" conf="compile->default"/>  
  12.         <dependency org="log4j" name="log4j" rev="1.2.12" conf="runtime->default"/>  
  13.   
  14.         <dependency org="junit" name="junit" rev="3.8.2" conf="test->default"/>  
  15.     dependencies>  
  16. ivy-module>  

上面定义了,compile、runtime、test、default配置(一个配置对应一个jar依赖集)。compile只依赖commons-lang-2.1.jar;但runtime还依赖log4j-1.2.12.jar;测试用的还依赖junit-3.8.2.jar。

配置jar依赖时,有个conf属性,它是用来声明配置的依赖。比如上面的commons-lang.jar是compile依赖的,同时compile依赖commons-lang的default依赖(compile->default形式,ivy会下载commons-lang的default依赖的相关jar)。

build.xml相关的ivy使用。

1、加ivy的xmlns。如

  1. <project name="ivy-hello" default="init" xmlns:ivy="antlib:org.apache.ivy.ant">  
  2.   
  3. project>  

2、下载jar。

  1. <target name="resolve" description="--> retreive dependencies with ivy">  
  2.     <ivy:retrieve pattern="${ivy.lib.dir}/[conf]/[artifact]-[revision].[ext]"/>  
  3. target>  

ivy.lib.dir默认是当前目录下的lib。[conf]是配置名。[artifact]是jar发布的名,[revision]是版本号,[ext]是扩展名。

3、classpath

  1. <path id="build.lib.path">  
  2.     <fileset dir="${lib.dir}/build" />  
  3. path>  
  4. <path id="test.lib.path">  
  5.     <fileset dir="${lib.dir}/test" />  
  6.     <pathelement location="${build.java.dir}" />  
  7. path>  

可以在编译任务用${compile.lib.path}的classpath,test的也同样。

现在可以基本运行ant 和 ivy了,运行ant resolve就可以看到ivy下载相关的jar包。

延伸:如果这个项目打的jar提供给其它项目用,可以在ivy里加上发布,并且在build.xml加ivy发布的任务。如:

1、ivy.xml加发布声明, 可以在configurations后面:

  1. <publications>  
  2.     <artifact name="my-ivy-hello" type="jar"  conf="compile" ext="jar"/>  
  3. publications>  

2、build.xml的发布任务:

  1. <target name="publish" depends="clean, build" description="--> compile test and publish this project in the local ivy repository">  
  2.     <property name="revision" value="${version}"/>  
  3.     <ivy:publish artifactspattern="${build.dir}/[artifact]-[revision].[ext]"  
  4.         resolver="local"  
  5.         pubrevision="${revision}"  
  6.         status="release"/>  
  7.     <echo message="project ${ant.project.name} released with version ${revision}" />  
  8. target>  

发布的jar放在${build.dir}目录下。[artifact]是在ivy.xml定义的name。现在可以在ivy2仓库的cache与local目录可以发现com.chenlb/ivy-hello/${version}/jars可以找到my-ivy-hello.jar了。

更详细的内容请看官方:, 这个conf示例比较好理解:

阅读(2027) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~