素材巴巴 > 程序开发 >

ivy学习与练习

程序开发 2023-09-14 19:19:33

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

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

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

                     

           节点下,需要注意的是需加入ivy的命名空间。在该节点中,是对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即可。

         


       





标签:

上一篇: spring boot shiro redis 整合(完整) 下一篇:
素材巴巴 Copyright © 2013-2021 http://www.sucaibaba.com/. Some Rights Reserved. 备案号:备案中。