ivy教程(2)-快速开始

在这个例子中,我们将看到使用ivy的一个最简单的方式。不使用任何特殊设置,ivy将使用maven2 仓 库来解析你在ivy文件中声明的依赖。让我们来看一眼涉及到的文件的内容。

你将在ivy发行包的src/example/hello-ivy 目录下找到这个教程的源文件。

1) ivy.xml 文件

这个文件用于描述项目对其他类库的依赖。

这里是例子

                                

这个文件的格式非常容易理解,但是让我们给出一些关于这里声明的东西的细节。首先,根元素ivy- module,version属性用于告诉ivy这个文件使用的ivy的版本。

然后是info标签,用于给出和这个我们正在定义依赖的模块有关的信息。这里只定义了组织和模块名 ,你可以自由选择任何你想要的组织和模块名,但是我们建议不要带空格。

最后,dependencies 部分让你定义依赖。这里这个模块依赖两个类库:commons-lang 和 commons- cli。如你所看到的,我们使用org和name属性来定义我们需要的依赖的组织和模块名。rev属性用于明确 说明你依赖的模块的修订版本。

为了知道如何填写这些属性,你需要知道你依赖的类库的准确信息。ivy默认使用maven2 仓库。我们 推荐你使用mvnreposiTory.com 来查找你需要的模块。一旦你找到它,你将得到如何在一个maven POM中 声明依赖的细节。例如:

     commons-lang     commons-lang     2.0

为了将这些信息转换为ivy依赖声明,你所需要做的只是使用groupId 作为组织,artifactId作为模块 名。这是我们在这个教程中为依赖做的,commons-lang 和 commons-cli。注意使用commons-lang 和 commons-cli 作为组织不是组织应该是什么的最好的例子。更好的方式是使用org.apache, org.apache.commons 或 org.apache.commons.lang. 然而,这是在maven2仓库中如何标识这些模块的方 法,因此获得他们的最简单的方式是照原来的样子使用细节(你将会看到在构建一个仓库时,你可以使用 命名空间来重新定义这些名称,如果你想让某些东西更加清晰)。

如果你想得到在ivy文件中可以做什么的更多细节,你可以看一下ivy文件的参考文档。

2) build.xml 文件

对应的build文件包含一个target集合,容许解析在ivy文件中声明的依赖,编译并运行示例代码,生 成依赖解析报告,并清理项目的缓存。

你可以使用标准的”ant -p” 来获取可用的target列表。可以随意看一下整个文件,这里是和依赖解析 有关的部分:

                        retrieve dependencies with  ivy">             

如你所见,调用ivy来解析和获取依赖是非常简单的:如果ivy安装正确,你所需要做的只是在你的ant 文件中定义一个xml的命名空间 (xmlns:ivy=”antlib:org.apache.ivy.ant”)。然后在这里命名空间中所 有的ivy ant 任务都可用。

这里我们只使用了一个任务:retrieve 任务。没有任何属性,它将使用默认设置并查找名为ivy.xml 的文件来获取依赖定义。这正是我们想要的,因此我们不需要做其他。

注意,在这案例中我们定义了一个”resolve” target 并调用了retrieve 任务。这听起来有点令人困 惑,实际上retrieve任务会执行一次resolve(解析依赖并下载他们到本地缓存),然后再执行一次 retrieve。查看How does it work ? 页面来得到关于这个的更多细节。

3) 运行项目

好,现在我们看到文件已经解析好了,让我们运行这个实例来看会发生什么。打开一个shell(或者命 令行)窗口,并进入hello-ivy 实例目录。然后,在命令提示符下,运行”ant”:

I:/hello-ivy>antBuildfile: src/example/hello-ivy/build.xmlresolve:[ivy:retrieve] :: Ivy 2.0.0-beta1-local-20071104204849 - 20071104204849 ::  http://ant.apache.org/ivy/ ::[ivy:retrieve] No ivy:settings found for the default reference 'ivy.instance'.   A default instance will be used[ivy:retrieve] no settings file found, using default....[ivy:retrieve] :: loading settings :: url =  jar:file:/c:/dev/data/opensource_workspace/ivy/build/artifact/ivy- core.jar!/org/apache/ivy/core/settings/ivysettings.xml[ivy:retrieve] :: resolving dependencies :: [ org.apache | hello-ivy |  working@BEN-ScokartG ][ivy:retrieve]     confs: [default][ivy:retrieve]     found [ commons-lang | commons-lang | 2.0 ] in public[ivy:retrieve]     found [ commons-cli | commons-cli | 1.0 ] in public[ivy:retrieve]     found [ commons-logging | commons-logging | 1.0 ] in  public[ivy:retrieve] downloading http://repo1.maven.org/maven2/commons-lang/commons- lang/2.0/commons-lang-2.0.jar ....[ivy:retrieve]  ........................................................................[ivy:retrieve] ................................................ (165kB)[ivy:retrieve] .. (0kB)[ivy:retrieve]     [SUCCESSFUL ] [ commons-lang | commons-lang | 2.0  ]/commons-lang.jar[jar] (3335ms)[ivy:retrieve] downloading http://repo1.maven.org/maven2/commons-cli/commons- cli/1.0/commons-cli-1.0.jar ....[ivy:retrieve] .................................... (29kB)[ivy:retrieve] .. (0kB)[ivy:retrieve]     [SUCCESSFUL ] [ commons-cli | commons-cli | 1.0 ]/commons -cli.jar[jar] (2053ms)[ivy:retrieve] downloading http://repo1.maven.org/maven2/commons-logging/commons- logging/1.0/commons-logging-1.0.jar ....[ivy:retrieve] .......... (21kB)[ivy:retrieve] .. (0kB)[ivy:retrieve]     [SUCCESSFUL ] [ commons-logging | commons-logging | 1.0  ]/commons-logging.jar[jar] (1933ms)[ivy:retrieve] :: resolution report ::[ivy:retrieve]     :: evicted modules:[ivy:retrieve]     [ commons-lang | commons-lang | 1.0 ] by [[ commons-lang  | commons-lang | 2.0 ]] in [default]     ---------------------------------------------------------------------     |                  |            modules             ||   artifacts   |     |       conf       | number| search|dwnlded|evicted||  number|dwnlded|     ---------------------------------------------------------------------     |      default     |   4   |   3   |   0   |   1    ||   3   |   3   |     ---------------------------------------------------------------------[ivy:retrieve] :: retrieving :: [ org.apache | hello-ivy ][ivy:retrieve]     confs: [default][ivy:retrieve]     3 artifacts copied, 0 already retrievedrun:      [java] standard message : hello ivy !      [java] capitalized by org.apache.commons.lang.WordUtils : Hello Ivy ! BUILD SUCCESSFULTotal time: 14 seconds

4) 发生了什么?

在没有任何设置的情况下,ivy从maven2 仓库中获取文件。这就是这里发生的事情。

resolve任务在maven2 仓库中发现commons-lang 和 commons-cli 模块,识别commons-cli 依赖于 commons-logging并作为间接依赖解析它。然后ivy下载所有对应的制品到它的缓存中(默认在你的user home下的.ivy2/cache 目录)。

最后,retrieve任务将这些解析好的jar包从ivy缓存复制到项目默认的lib目录(你可以简单地通过设 置retrieve任务的pattern属性来改变).

你可能会发现这个任务仅仅为输出一个”Hello Ivy !”信息就花费了很长的时间。但是记住大量的时间 用在从网络下载需要的文件。让我们再次运行它:

I:/hello-ivy>antBuildfile: src/example/hello-ivy/build.xmlresolve:[ivy:retrieve] :: Ivy 2.0.0-beta1-local-20071104204849 - 20071104204849 ::  http://ant.apache.org/ivy/ ::[ivy:retrieve] No ivy:settings found for the default reference 'ivy.instance'.   A default instance will be used[ivy:retrieve] no settings file found, using default...[ivy:retrieve] :: loading settings :: url =  jar:file:/c:/dev/data/opensource_workspace/ivy/build/artifact/ivy- core.jar!/org/apache/ivy/core/settings/ivysettings.xml[ivy:retrieve] :: resolving dependencies :: [ org.apache | hello-ivy |  working@BEN-ScokartG ][ivy:retrieve]     confs: [default][ivy:retrieve]     found [ commons-lang | commons-lang | 2.0 ] in public[ivy:retrieve]     found [ commons-cli | commons-cli | 1.0 ] in public[ivy:retrieve]     found [ commons-logging | commons-logging | 1.0 ] in  public[ivy:retrieve] :: resolution report ::[ivy:retrieve]     :: evicted modules:[ivy:retrieve]     [ commons-lang | commons-lang | 1.0 ] by [[ commons-lang  | commons-lang | 2.0 ]] in [default]     ---------------------------------------------------------------------     |                  |            modules             ||   artifacts   |     |       conf       | number| search|dwnlded|evicted||  number|dwnlded|     ---------------------------------------------------------------------     |      default     |   4   |   0   |   0   |   1    ||   3   |   0   |     ---------------------------------------------------------------------[ivy:retrieve] :: retrieving :: [ org.apache | hello-ivy ][ivy:retrieve]     confs: [default][ivy:retrieve]     0 artifacts copied, 3 already retrievedrun:      [java] standard message : hello ivy !      [java] capitalized by org.apache.commons.lang.WordUtils : Hello Ivy ! BUILD SUCCESSFULTotal time: 3 seconds

太好了!缓存被使用,不再需要下载,构建只在瞬间。

现在,如果你想生成一个泥的模块的所有依赖的详细报告,你可以调用report target,并查看在 build目录中的生成文件。你将得到一些类似这样的东西。

如你所见,使用ivy来解析存储在maven2 仓库中的依赖是非常容易的。现在你可以继续下一个教程来 学习更多的关于如何使用模块配置的内容,这是一个非常强大的ivy特殊特性。其他教程也可用,你将学 习到如何使用ivy设置来建造一个可能非常复杂的企业仓库。现在也是开始阅读参考文档的好时机,尤其 是介绍题材可以很好的给出ivy概况。对于开始考虑如何使用ant + ivy来构建一个干净而健壮的构建系统 来说,最佳实践页面是必须阅读的。

不义而富且贵,于我如浮云。

ivy教程(2)-快速开始

相关文章:

你感兴趣的文章:

标签云: