ivy教程(4)-多解析器-skydream-iteye技术网站

ivy教程(4)-多解析器-skydream-iteye技术网站
2011年06月01日
  这个例子演示模块是如何被多解析器获得的。使用多解析器在很多情况下是非常有用的,这里是一些例子:
  * 来自发行的单独的集成构建
  * 为第三方模块使用公共仓库并且为内部模块使用私有仓库
  * 使用一个仓库来存储那些在无法管理的公共仓库里里面的不清晰的模块
  * 使用本地仓库来暴露在一个开发人员的位置上生成的构建
  在ivy中,多解析器的使用是通过一个名为解析器链的复合解析器来支持的。
  在我们的例子中,我们将简单的展示如何使用两个解析器,一个在本地仓库而另一个使用maven2仓库。
  1) 项目描述
  1. 项目: chained-resolvers
  项目非常简单,只包含一个简单的类: example.Hello.
  它依赖两个类库:Apache commons-lang 和一个小的test类库(源文件被包含在jar文件中).test类库被项目使用用于将字符串转换为大写,而commons-lang用来以大些书写同样的字符串。
  这是项目的内容:
  * build.xml: 项目的ant 构建文件
  * ivy.xml: ivy项目文件
  * src\example\Hello.java: 项目仅有的一个类
  让我们看一下ivy.xm文件:
  
  
  
  
  
  
  和我们期望的一样,ivy文件声明依赖于两个项目使用的依赖:commons-lang 和 test.注意我们没有指定test依赖的组织,在这种情况下ivy假定为和声明的模块同样的组织,换句话说,在这个案例中是org.apache。
  2. ivy设置
  ivy设置在设置目录中生成,它只包含一个文件: ivysettings.xml.
  
  
  
  
  
  
  
  
  
  
  3. 设置标签
  这个标签用一些参数初始化ivy.这里只使用了一个,默认使用的解析器的名称。
  4. 解析器标签
  在这个标签下,我们可以找到ivy将使用的解析器的描述。在我们的例子中,我们仅使用一个解析器,称为"chain-example",它非常特殊在于它定义了一个解析器列表(或言之链)。
  放在在链中的解析器有:
  * libraries : 这是一个文件解析器。这个解析器被配置为在包含ivysettings.xml文件的目录下的"repository"子目录查找制品。
  * ibiblio : 这个解析器很特殊。它查找ibiblio maven仓库来获取类库。
  就这样,我们配置好了解析器链。
  2) walkthrough
  步骤 1: 准备
  打开一个dos或者shell串口,并进入"chained-resolvers"目录。
  步骤 2: 清理目录树
  在提示符下: ant
  这将清理完整的项目目录树和ivy缓存。每次你想清理这个例子的时候你都可以这样做。 在几乎所有的例子中,我们提供cleantarget作为默认的target。既然大部分例子使用相同的ivy缓存,每次你调用这个target时你将清理这个ivy缓存。
  清理ivy缓存通常你可以放心的做(除了性能外):它仅仅是缓存,所有的东西都可以从仓库中再次获得。对于从maven2过来的人来说,这听起来有点奇怪,但是记住在ivy中,缓存不是本地仓库,东西被隔离地保持干净。
  步骤 3: 运行项目
  进入chainedresolvers-project目录,并简单运行ant。 I:\chained-resolvers\chainedresolvers-project>ant
  Buildfile:src\example\chained-resolvers\chainedres olvers-project\build.xml
  resolve:
  [ivy:retrieve]::Ivy2.0.0-beta1-local-2007110420484 9-20071104204849::http://ant.apache.org/ivy/::
  [ivy:retrieve]::loadingsettings::file=C:\dev\data\ opensource_workspace\ivy\src\example\chained-resolv ers\config\ivysettings.xml
  [ivy:retrieve]::resolvingdependencies::[org.apache |chained-resolvers|working@BEN-ScokartG]
  [ivy:retrieve]confs:[default]
  [ivy:retrieve]found[commons-lang|commons-lang|2.0] inibiblio
  [ivy:retrieve]found[org.apache|test|1.0]inlibrarie s
  [ivy:retrieve]downloadinghttp://www.ibiblio.org/ma ven/commons-lang/jars/commons-lang-2.0.jar...
  [ivy:retrieve] .................................................. ..........................................
  [ivy:retrieve] .................................................. ..........................................(165kB)
  [ivy:retrieve]..(0kB)
  [ivy:retrieve][SUCCESSFUL][commons-lang|commons-la ng|2.0]/commons-lang.jar[jar](5928ms)
  [ivy:retrieve]downloadingC:\dev\data\opensource_wo rkspace\ivy\src\example\chained-resolvers\config\re pository\test-1.0.jar...
  [ivy:retrieve]..(1kB)
  [ivy:retrieve][SUCCESSFUL][org.apache|test|1.0]/te st.jar[jar](10ms)
  [ivy:retrieve]::resolutionreport::
  -------------------------------------------------- -------------------
  ||modules||artifacts|
  |conf|number|search|dwnlded|evicted||number|dwnlde d|
  -------------------------------------------------- -------------------
  |default|2|2|0|0||2|2|
  -------------------------------------------------- -------------------
  [ivy:retrieve]::retrieving::[org.apache|chained-re solvers]
  [ivy:retrieve]confs:[default]
  [ivy:retrieve]2artifactscopied,0alreadyretrieved
  run:
  [mkdir]Createddir:C:\dev\data\opensource_workspace \ivy\src\example\chained-resolvers\chainedresolvers -project\build
  [javac]Compiling1sourcefiletoC:\dev\data\opensourc e_workspace\ivy\src\example\chained-resolvers\chain edresolvers-project\build
  [java]standardmessage:exampleworld!
  [java]capitalizedbyorg.apache.commons.lang.WordUti ls:ExampleWorld!
  [java]upperCasedbytest.StringUtils:EXAMPLEWORLD!
  BUILDSUCCESSFUL
  Totaltime:12seconds
  我们能看到在resolve任务的日志中,两个依赖被获取(2个制品)并被复制到ivy缓存目录(2个下载)。
  run target成功地使用了来自ibiblio仓库的commons-lang.jar和来自本地仓库中的test.jar
  3) 更进一步
  这个非常简单的例子有助于看到如何对在一个链中的两个解析器进行基本的设置。对于那些想知道这个解析器提供的所有特性的人,可以查看链解析器的参考文档。
  从这个基本的例子中尼可以得到的最有趣的事情是:
  * 链并不局限于两个内嵌解析器,你可以使用任何你想要的数目。
  * 通过设置returnFirst="true",你可以得到一个一旦发现给定模块就停止的链。
  * 通过设置dual="true",整个完整的链将被用于模块描述符和制品,而当dual="false",在链中找到模块描述符(如果有任何一个)的解析器将被用于查找制品。
  
  
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值