ivy学习与练习

感谢同事分享的学习资料!本文来自一位我非常佩服的同事,虽说他也是刚接触这些知识,但超强的学习能力是我所敬佩的。

Apache Ivy是一个优秀的管理(记录、跟踪、解析和报告)项目依赖的工具,可与Apache Ant紧密集成。目前网上关于ivy的文章比较少,比较全面的资料有ivy自带的英文文档,如有疑惑可反复查看文档说明。通过学习文档结合下面的例子学习效果会更好。

1.ivy的安装

将下载好的ivy.jar文件放入ant目录下的lib文件夹即为完成ivy的安装

2.ivy工作模式简介

ivy的工作方式如下所示,其中Public Repository可理解为服务器仓库,Enterprise Repository理解为本地模式。

ivy的文件组织结构如下图:

3.ivy文件说明及相应练习

3.1 基本文件(练习1)

在root目录下,我们新建一个名为ivyDemo的文件夹作为存放练习的目录。在此目录下,建立文件夹Demo1存放该练习文件。

a)在Demo1下新建ivy.xml文件,内容为:

这个ivy.xml文件比较简单,<ivy-module>节点说明这是一个ivy文件,其中version属性值为ivy的版本号,一个ivy文件描述的是一个module(模块)的结构。在<ivy-module>节点下的<info>节点是对module进行描述的。属性organisation是用于说明所属组织,可为个人名或者一个开发组的名字。属性module是用于说明module的名字,此处为module1。属性status用于说明该module中项目的状态。

b)在Demo2下新建build.xml文件,内容为

<project>节点下,需要注意的是需加入ivy的命名空间。在该<property>节点中,是对ivy默认的本地自用仓库路径进行修改,默认的本地自用仓库路径为:/root/.ivy2/local/。此处修改成build.xml文件所处目录的上级目录下,既ivyDemo目录下的repository/local。在名为publish-local的target中可看到,执行了两个ivy任务,分别为resolve和publish。Resolve将对ivy文件进行解析,在执行publish之前须先执行resolve或对publish各属性进行详细的设定。在publish任务中,属性artifactspattern中将对需要发布的artifact(制品)所在目录进行设定。属性resolver将设定解析器,此处使用的是ivy默认的local解析器。属性Pubrevision设定的是该次publish的版本号。

c)之后在Demo1目录下建立新文件夹名为build,在其中放入需要进行发布的jar包,应与module的名字相同,此处为module1.jar。

d)在Demo1目录下输入命令 ant,执行build.xml文件,如下图:

e)Build成功后可在ivyDemo目录下看到repository文件夹,其中有刚刚发布到本地仓库的jar以及ivy文件,路径分别为:

Jar包路径:/root/ivyDemo/repository/local/ch/module1/1.0/jars/module1.jar

Ivy文件路径:/root/ivyDemo/repository/local/ch/module1/1.0/ivys/ivy.xml

可发现路径模式为:

/root/ivyDemo/repository/local/[organisation]/[module]/[revision]/[type]

大家请记住这个模式,在之后的说明中将会用到。

3.2练习2     Publications: artifact

a)在ivyDemo目录下新建Demo2文件,在Demo2文件中新建ivy.xml文件如下:

和上个练习一样,在Demo2中新建build文件。在build中新建两个jar包

在上一个练习中,没有写publications以及其中的artifact(制品),于是ivy会默认发布一个跟module名称一样的制品,这也是为什么在上一个练习中我们的jar包名称跟module名称一样。在这个练习中,我们有两个jar包,分别名为jar1.jar和jar2.jar。于是我们需要写publications以及artifact使ivy能识别这两个文件,格式如上图所示。其中属性name为制品的名称;属性type则是说明制品的类型,决定了发布后制品所处的目录;而属性ext则是声明了制品的后缀名帮助ivy找到确切的文件。若不加ext属性,ivy则会在build.xml中设定的目录下寻找到最先符合条件的文件。

b)新建上个练习相同的build.xml,修改project
name即可。之后在Demo2目录下使用ant执行build,结果如下:

大家仓库目录下找到对应的文件查看效果。

3.3练习3    Dependencies: dependency

       a) 在Demo目录下新建Demo3文件,在该文件下新建ivy.xml文件,内容如下:

在这个练习中发布一个jar包,同时,将建立一个依赖关系。例如,我们这个工程需要用到module1模块中的jar包,于是在ivy文件中使用Dependencies:dependency进行声明。其中属性org为依赖的module所属的组织名;属性name为依赖的module的名称;属性rev为依赖的module的版本。

b)在Demo3文件下建立build文件,在该文件下加入jar3.jar文件。

c)在Demo3文件下新建build.xml文件如下:

d)执行ant结果如下

在执行成功后,可看到Demo3目录下出现了一个lib目录,其中有module1中的module1-1.0.jar文件(注意文件命名格式,由jar包名+版本号组成)。

3.4练习(Configurations: conf)

       若一个module下有多个文件,而此时另一个module只需要这个module下的其中一部分文件,此时就需要用到  Configurations: conf 了。

a)首先需修改Demo2中的ivy文件。如下

(内容解析:可看到在这个ivy文件中,增加了configurations节点,以及下属的conf节点。在conf中的name属性既是该conf的名字。而在artifact里,使用了这两个conf。于是在依赖module2时,可以使用confforjar1和confforjar2来分别取到jar1.jar和jar2.jar。并修改build.xml中ivy:pubish的pubrevision属性为2.0。注意:publish版本号可在build.xml以及ivy文件两个中的一个进行声明,但不可两个一起声明。

)

运行ant,成功后生产2.0版本的module2.

(补充:由于上面build.xml已经声明了publish版本号,所以ivy.xml文件就不可声明了,但我们还需要知道在ivy.xml文件是怎么声明publish版本号的。如下)

b)新建Demo4目录,在目录下建ivy.xml文件。内容如下:

上面内容解释:在此ivy文件中,首先声明了一个名为default的conf。而在dependency中,首先声明依赖的是module2,之后加入conf为“default->confforjar2”,意义为:在使用default时依赖于module2中的confforjar2。

注意:这里不进行声明ivy也会自动生成一个名为default的conf,写出来只是便于理解。而在artifact中,不进行声明ivy会默认该artifact使用的conf是default。

c)在Demo下新建build文件,内容和Demo3的build.xml一样,修改下工程名即可。

d)不要忘了在Demo4下新建一个build文件夹,build文件夹下要有一个jar4.jar文件。

e)定位到Demo4下运行ant即可。

时间: 2024-08-05 13:03:30

ivy学习与练习的相关文章

ivy学习

经典资料: http://www.blogjava.net/aoxj/category/37028.html 其他资料: http://www.blogjava.net/aoxj/archive/2009/03/31/263012.html http://blog.csdn.net/zhaoyue007101/article/details/46563847 http://ivy.group.iteye.com/group/wiki/1946-ivy-tutorials-adjusting-de

Gradle学习目录总结

如果是你想干的事情,在别人看起来可能是很难的一件事,不过你自己很喜欢,你不会觉得很苦.我开始创业那会是28岁.对我来讲,我创业的目的不是为了自己当老板,我希望有一个平台有一个环境,我可以控制一些资源,让我去创造一个新的产品和服务: -- 周鸿祎 Gradle是一种依赖管理工具,基于Groovy语言,面向Java应用为主,它抛弃了基于XML的各种繁琐配置,取而代之的是一种基于Groovy的领域特定(DSL)语言. 当然,我们现在最多都是在Android Studio的项目中,和我一样没有接触过的就

&lt;Java&gt;&lt;学习路线图&gt;

Java是一个通用的编程语言,其实可以干很多事,怎么学Java就看怎么用了. 但有一些一般的步骤: 1.熟悉一种文本编辑器,比如Vim, Emacs, Notepad++, TextMate等.知道哪些是开源的,哪些是闭源的,哪些要收费.养成不用盗版软件的习惯.2. 安装JDK(建议用你的Linux发行版自带的软件包管理器安装openjdk,过程中可能需要读发行版特定的文档)3. 写一个Java的Hello world程序,并用命令行工具javac编译,再用java命令运行这个程序.过程中熟悉源

Kettle源码学习(一)——把Kettle项目跑起来

kettle(pentaho data integration),是一款开源的C/S版的ETL工具,最近打算学习一下kettle源码,并自己写一个mini kettle,并改造成基于事件触发的流处理模型,前端欲支持桌面版和Web版. 首先,首要的工作是将kettle工程构建起来,达到能边跑看调试来观察学习源码.笔者采用的是自己构建一个项目,将kettle的相关模块代码和资源文件导入,并添加依赖库的方式,自认为有些不爽,但由于官网github下下来的工程,采用的是ivy构建工具,笔者没办法把依赖都

黑苹果-IOS学习的开始

九个月之前,由于学习ios,而自己又囊中羞涩,于是便一脚跨入了装黑苹果的这个坑!!! 深知安装黑苹果的不易,在这里写一下关于我的Thinkpad E430c安装黑苹果教程(Mac版本:Yosemite 10.10.4),希望能够帮助有需要的朋友. 首先贴上我的电脑配置报表: ---------------------------------------------------------------------[ 概览 ]-------------------------------------

Hadoop学习笔记(4) ——搭建开发环境及编写Hello World

Hadoop学习笔记(4) ——搭建开发环境及编写Hello World 整个Hadoop是基于Java开发的,所以要开发Hadoop相应的程序就得用JAVA.在linux下开发JAVA还数eclipse方便. 下载 进入官网:http://eclipse.org/downloads/. 找到相应的版本进行下载,我这里用的是eclipse-SDK-3.7.1-linux-gtk版本. 解压 下载下来一般是tar.gz文件,运行: $tar -zxvf eclipse-SDK-3.7.1-linu

Hadoop学习笔记(5) ——编写HelloWorld(2)

Hadoop学习笔记(5) ——编写HelloWorld(2) 前面我们写了一个Hadoop程序,并让它跑起来了.但想想不对啊,Hadoop不是有两块功能么,DFS和MapReduce.没错,上一节我们写了一个MapReduce的HelloWorld程序,那这一节,我们就也学一学DFS程序的编写. DFS是什么,之前已经了解过,它是一个分布式文件存储系统.不管是远程或本地的文件系统,其实从接口上讲,应该是一至的,不然很难处理.同时在第2节的最后,我们列出了很多一些DFS的操作命令,仔细看一下,这

转:Java学习路线图

作者: nuanyangyang 标  题: Java学习路线图(整理中,欢迎纠正) 发信站: 北邮人论坛 (Mon Aug 11 19:28:16 2014), 站内   [以下肯定是不完整的列表,欢迎补充]   Java是一个通用的编程语言,其实可以干很多事,怎么学Java就看怎么用了.   但有一些一般的步骤:   1. 熟悉一种文本编辑器,比如Vim, Emacs, Notepad++, TextMate等.知道哪些是开源的,哪些是闭源的,哪些要收费.养成不用盗版软件的习惯. 2. 安装

轻松学习正则表达式

转载自:http://www.cnblogs.com/jamesping/articles/2252675.html 装载自:http://www.cnblogs.com/sxwgf/archive/2011/11/17/2252076.html 继续把我在个人博客上新翻译的文章投递到博客园来,这次是有关正则表达式的,很基础,主要是让读者把握住正则表达式中的3种括号的用法,用这3种括号几乎可以涵盖所有的正则式. 写在最前面 前两天我从CodeProject上翻译了一篇关于Javascript的文