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文件比较简单,
b)在Demo2下新建build.xml文件,内容为
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]
大家请记住这个模式,在之后的说明中将会用到。
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即可。
标签:
相关文章
-
无相关信息