目录
Ivy附带了一些默认设置,这使得在一般环境中使用非常简单。
1、概念
Ivy默认设置包括3种类型的存储库:
- local:用户私有的存储库。
- shared:团队所有成员共享的存储库。
- public:可以找到大多数模块,尤其是第三方模块的公共存储库。
1)Local
当您希望在不受环境中发生的任何其他事情干扰的情况下执行某些操作时,本地存储库特别有用。这意味着只要Ivy能够在这个存储库中找到一个模块,它就会被使用,无论其他存储库中有什么可用的模块。在本地存储库中找到的模块必须是完整的,即它们必须同时提供模块描述符和已发布的工件。
2)Shared
顾名思义,共享存储库旨在在整个开发团队中共享。它是一个可以发布团队私有模块的地方,也是一个可以放置在公共存储库中找不到模块的地方。您还可以在此处放置公共存储库中不准确的模块(例如,模块描述符错误或不完整)。请注意,模块可以跨共享存储库和公共存储库进行拆分:例如,您可以在共享存储库中拥有模块描述符,在公共存储库中有工件。
3)Public
公共存储库是可以找到大多数模块的地方,但有时缺少所需的信息。它通常是仅通过Internet连接可用的存储库,即使这不是强制性的。
2、设置存储库
许多存储库都使用文件系统中的同一根目录。${ivy.default.ivy.user.dir}
,默认情况下,它指的是用户家目录下的.ivy2
目录。在不定义ivysettings.xml
文件的情况下,我们可以通过设置Ivy变量,来完成一些事情:
- 如果在Ant中使用Ivy,可在对构建文件中的Ivy进行任何调用之前设置Ant属性
- 如果从命令行使用Ivy,请设置环境变量
例如:
<target name="resolve">
<property name="ivy.default.ivy.user.dir" value="/path/to/ivy/user/dir"/>
<ivy:resolve/>
</target>
下面介绍如何覆盖不同存储库的默认值,以及这些默认值是什么。
1)Local
本地存储库的默认路径是:${ivy.default.ivy.user.dir}/local。你可以通过给Ivy变量ivy.local.default.root
设值来修改其默认值。如:
ivy.local.default.root=/opt/ivy/repository/local
如果您已经有了要用作本地存储库的内容,则可能还需要修改此存储库的布局。同样,有两个变量可用于此目的:
-
ivy.local.default.ivy.pattern
:查找Ivy模块描述符文件的模式 -
ivy.local.default.artifact.pattern
:查找工件的模式
例如:
ivy.local.default.ivy.pattern=[module]/[revision]/ivy.xml
ivy.local.default.artifact.pattern=[module]/[revision]/[artifact].[ext]
2)Shared
共享存储库的默认路径是: ${ivy.default.ivy.user.dir}/shared。
与本地存储库类似,我们可以通过
ivy.shared.default.root
变量来修改其默认值。因为共享存储库应该是共享的,所以通常将其修改为网络共享目录。类似的,我们也可以修改此存储库的布局。例如:
ivy.shared.default.root=/opt/ivy/repository/shared
ivy.shared.default.ivy.pattern=[organisation]/[module]/[revision]/ivy.xml ivy.shared.default.artifact.pattern=[organisation]/[module]/[revision]/[artifact].[ext]
3)Public
默认情况下,公共仓库是 m2 兼容模式下的 ibiblio(即,Maven 2 公共仓库)。 这个存储库的优点是提供了很多模块,其中大多数模块都有元数据。
注意:
在 1.4 版本中,Ivy 使用 ivyrep 作为默认解析器,如果要恢复它,需将ivy.14.compatible=true 设置为 Ant 属性。
3、修改Ivy默认配置
我们已经了解了如何轻松更改三个主存储库的设置。但是,如果我的共享存储库位于web服务器上,该怎么办?如果不想使用Maven 2存储库作为公共存储库,该怎么办?
默认情况下,Ivy 使用打包在 Ivy jar 中的 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>
上面的配置文件描述的是:Ivy使用default解析器来解析工件。这个default解析器分别由local、shared、public三个解析器组成。它们分别定义在:
- ivysettings-local.xml
<ivysettings>
<property name="ivy.local.default.root" value="${ivy.default.ivy.user.dir}/local" override="false"/>
<property name="ivy.local.default.ivy.pattern" value="[organisation]/[module]/[revision]/[type]s/[artifact].[ext]" override="false"/>
<property name="ivy.local.default.artifact.pattern" value="[organisation]/[module]/[revision]/[type]s/[artifact].[ext]" override="false"/>
<resolvers>
<filesystem name="local">
<ivy pattern="${ivy.local.default.root}/${ivy.local.default.ivy.pattern}" />
<artifact pattern="${ivy.local.default.root}/${ivy.local.default.artifact.pattern}" />
</filesystem>
</resolvers>
</ivysettings>
- ivysettings-shared.xml
<ivysettings>
<property name="ivy.shared.default.root" value="${ivy.default.ivy.user.dir}/shared" override="false"/>
<property name="ivy.shared.default.ivy.pattern" value="[organisation]/[module]/[revision]/[type]s/[artifact].[ext]" override="false"/>
<property name="ivy.shared.default.artifact.pattern" value="[organisation]/[module]/[revision]/[type]s/[artifact].[ext]" override="false"/>
<resolvers>
<filesystem name="shared">
<ivy pattern="${ivy.shared.default.root}/${ivy.shared.default.ivy.pattern}" />
<artifact pattern="${ivy.shared.default.root}/${ivy.shared.default.artifact.pattern}" />
</filesystem>
</resolvers>
</ivysettings>
- ivysettings-public.xml
<ivysettings>
<resolvers>
<ibiblio name="public" m2compatible="true"/>
</resolvers>
</ivysettings>
其中,default解析器实际上是一个链式解析器,它包含一个local解析器和一个main链式解析器。定义在:
- ivysettings-default-chain.xml
<ivysettings>
<resolvers>
<chain name="default" returnFirst="true" checkmodified="true">
<resolver ref="local"/>
<resolver ref="main"/>
</chain>
</resolvers>
</ivysettings>
其引用的main链式解析器,实际上包含了两个解析器,分别是shared、public解析器。定义在:
- ivysettings-main-chain.xml
<ivysettings>
<resolvers>
<chain name="main" dual="true">
<resolver ref="shared"/>
<resolver ref="public"/>
</chain>
</resolvers>
</ivysettings>
1)定义公共解析器
如果您想定义自己的公共解析器,您只需使用如下设置配置 Ivy:
<ivysettings>
<settings defaultResolver="default"/>
<include url="http://myserver/ivy/myivysettings-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 这个公共包含被更改为了自定义的公共解析器。此外需注意的是:${ivy.default.settings.dir}
这个变量是Ivy 的默认设置文件所在位置。
下面是这个自定义公共解析器的例子:
<ivysettings>
<resolvers>
<filesystem name="public">
<ivy pattern="/path/to/my/public/rep/[organisation]/[module]/ivy-[revision].xml"/>
<artifact pattern="/path/to/my/public/rep/[organisation]/[module]/[artifact]-[revision].[ext]"/>
</filesystem>
</resolvers>
</ivysettings>