Ivy入门:Eclipse整合Ivy

前言
最近因为来的一家新公司,项目中大量使用了ivy来进行依赖管理,并没有用现在相对主流的Maven;两者可以进行简单的比较,Ivy仅提供依赖管理功能,但是Maven是一个软件项目管理综合工具,能够管理构建、报告、文档,以及根据中心化的信息来管理依赖,Ivy更多的是和Ant一起使用。

Eclipse整合Ivy
1.ivy插件安装
Help->Eclipse Marketplace…输入ivy,如下图所示:
QQ截图20170605204702

点击安装即可,安装完在Window->Preferences下出现了ivy目录,如下图所示:
QQ截图20170606210518

2.简单实例
ivy官网地址:http://ant.apache.org/ivy/
下载最新的安装包apache-ivy-2.4.0-bin.zip,解压目录中src/example中包含了常用的实例,以下以hello-ivy为例子
hello-ivy代码结构如下:
QQ截图20170606211259
引入依赖的包只需要:右击ivy.xml->Add Ivy Library…->Finish
这里我们能够发现通过ivy下载的依赖包在{user home}/.ivy目录下,jar包和sources都在cache文件夹下,如下图所示:
QQ截图20170606211831
其中的org.apache-hello-ivy-default.xml文件,包含了下载依赖包的相关信息,其中字段origin-location用来描述了原始的路径,具体如下:

https://repo1.maven.org/maven2/commons-cli/commons-cli/1.0/commons-cli-1.0.pom

是不是很熟悉,ivy默认使用的公共库和maven是一样的。

3.默认ivysettings.xml
ivy默认的公共库以及本地的cache路径在ivy-2.4.0.jar中可以找到,路径如下:org/apache/ivy/core/settings目录下,如下图:
QQ截图20170606213337

ivysettings.xml默认配置如下:

<ivysettings>
	<settings defaultResolver="default"/>
	<include url="${ivy.default.settings.dir}/ivysettings-public.xml"/>
	<include url="${ivy.default.settings.dir}/ivysettings-shared.xml"/>
	<include url="${ivy.default.settings.dir}/ivysettings-local.xml"/>
	<include url="${ivy.default.settings.dir}/ivysettings-main-chain.xml"/>
	<include url="${ivy.default.settings.dir}/ivysettings-default-chain.xml"/>
</ivysettings>

ivysettings-public.xml配置如下:

<ivysettings>
	<resolvers>
		<ibiblio name="public" m2compatible="true"/>
	</resolvers>
</ivysettings>

public配置让我们在没有指定公共库的情况下去https://repo1.maven.org/maven2下载包

4.运行build.xml
右击build.xml->Ant Build,运行结果如下:

Buildfile: E:\ksfzhaohui\osp\workspace-neon\IvyTest\build.xml
resolve:

BUILD FAILED
E:\ksfzhaohui\osp\workspace-neon\IvyTest\build.xml:38: Problem: failed to create task or type antlib:org.apache.ivy.ant:retrieve
Cause: The name is undefined.
Action: Check the spelling.
Action: Check that any custom tasks/types have been declared.
Action: Check that any <presetdef>/<macrodef> declarations have taken place.
No types or tasks have been defined in this namespace yet

This appears to be an antlib declaration. 
Action: Check that the implementing library exists in one of:
        -E:\ksfzhaohui\osp\eclipse-neon\plugins\org.apache.ant_1.9.6.v201510161327\lib
        -C:\Users\Administrator.SKY-20170404CXG\.ant\lib
        -a directory added on the command line with the -lib argument

解决办法:
Window->Preferences->Ant->Runtime->ClassPath->Ant Home Entries(Default)->Add External JARS,将下载的apache-ivy-2.4.0中的ivy-2.4.0.jar添加进去或者eclipse->plugins中添加org.apache.ivy_2.4.0.final_20141213170938.jar

5.ivysettings.xml标签分析
具体可以参考apache-ivy-2.4.0/doc/settings/settings.html,ivysettings.xml中提供了如下标签:
QQ截图20170606215740

经常使用的标签如settings,caches,resolvers等,默认的ivysettings.xml中没有提供caches标签,但是默认本地缓存在{user home}/.ivy目录下,这是因为caches中的属性:defaultCacheDir,指定了默认的路径:defaults to .ivy2/cache in the user’s home directory
更新详细的标签以及标签的属性,可以参考文档

6.用户自定义ivysettings.xml
以上对ivysettings.xml的标签以及属性有了详细的了解,下面自定义ivysettings.xml,使用公共库为阿里云提供

<ivysettings>
    <settings   
        defaultResolver="Client"/>   
    <caches
        resolutionCacheDir="${basedir}/ivy-resolution"
        repositoryCacheDir="D:/ivy/myRepositories/ivy-cache"
        defaultCacheDir="D:/ivy/myRepositories/ivy-cache"
        useOrigin="true"/>

    <resolvers>
        <chain name="Client">
            <ibiblio name="nexus-aliyun" m2compatible="true" 
      root="http://maven.aliyun.com/nexus/content/groups/public/"/>
        </chain>           
    </resolvers>
</ivysettings>

公共库指定了http://maven.aliyun.com/nexus/content/groups/public/,由阿里云提供;将自定义的ivysettings.xml放入D:/ivy目录下,然后在eclipse中配置window->Preferences->Ivy->Settings->Ivy settings path->File system…将自定义的ivysettings.xml添加进去,此时再次右击ivy.xml->Add Library…将从aliyun公共库下载,本地缓存在D:/ivy/myRepositories目录下。

总结
以上对在Eclipse中使用ivy进行开发做了入门介绍,并且对ivysettings.xml配置文件进行了详细的介绍;文中并没有对ivy.xml配置文件进行过多说明,关于ivy.xml的更多介绍将会在后续文件中描述。