将公共 maven 存储库与 ivy 一起使用
Posted
技术标签:
【中文标题】将公共 maven 存储库与 ivy 一起使用【英文标题】:Use public maven repository with ivy 【发布时间】:2011-06-17 16:27:44 【问题描述】:我有一个ivy.xml
包含
<dependencies>
<dependency org="commons-lang" name="commons-lang" rev="2.4"/>
<dependency org="foo-bar" name="superwidgets" rev="1.5"/>
</dependencies>
整个超级小部件都托管在一个 maven 存储库中,地址为 http://example.com/m2/。常春藤文档mentions resolvers,但它似乎假设一个常春藤存储库。如何将单个非官方 maven 存储库添加到我的 ivy 设置中以仅由单个模块使用? (或者换一种说法,什么对应于常春藤中 maven 的 <repository>
标签?)没什么特别的,所以我希望在我的 ivy.xml 中有一个单行。
【问题讨论】:
【参考方案1】:您需要添加一个 ivysettings.xml 文件,其中列出了以下存储库(resolvers in ivy speak)
<ivysettings>
<settings defaultResolver="chain"/>
<resolvers>
<chain name="chain">
<ibiblio name="central" m2compatible="true"/>
<ibiblio name="example" m2compatible="true" root="http://example.com/m2/"/>
</chain>
</resolvers>
</ivysettings>
在我看来,将依赖声明 (ivy.xml) 与检索机制 (settings.xml) 分开会更有意义。这在 Maven 中是不需要的,因为它只支持一种类型的存储库。
如果你想变得非常花哨,你可以控制哪个存储库为特定模块提供服务:
<ivysettings>
<settings defaultResolver="central"/>
<resolvers>
<ibiblio name="central" m2compatible="true"/>
<ibiblio name="example" m2compatible="true" root="http://example.com/m2/"/>
</resolvers>
<modules>
<module organisation="foo-bar" name="superwidgets" resolver="example"/>
</modules>
</ivysettings>
【讨论】:
我是新手,尝试使用<ibiblio name="tmatesoft-releases" m2compatible="true" root="http://maven.tmatesoft.com/content/repositories/releases/"/>
并得到unknown resolver main
和unknown resolver public
【参考方案2】:
我更喜欢包含 SpringSource 的 EBR 和 Maven Central 的链式解析器,如下所示:
<ivysettings>
<settings defaultResolver="spring-chain" />
<resolvers>
<chain name="spring-chain">
<url name="com.springsource.repository.bundles.release">
<ivy pattern="http://repository.springsource.com/ivy/bundles/release/[organisation]/[module]/[revision]/[artifact]-[revision].[ext]" />
<artifact pattern="http://repository.springsource.com/ivy/bundles/release/[organisation]/[module]/[revision]/[artifact]-[revision].[ext]" />
</url>
<url name="com.springsource.repository.bundles.external">
<ivy pattern="http://repository.springsource.com/ivy/bundles/external/[organisation]/[module]/[revision]/[artifact]-[revision].[ext]" />
<artifact pattern="http://repository.springsource.com/ivy/bundles/external/[organisation]/[module]/[revision]/[artifact]-[revision].[ext]" />
</url>
<ibiblio name="ibiblio" m2compatible="true"/>
</chain>
</resolvers>
</ivysettings>
虽然我不直接使用,但我更喜欢create and control my own local Ivy repository。
【讨论】:
【参考方案3】:这是一个尝试保留 Ivy 的默认行为并仅添加到存储库的 maven.tmatesoft.com
存储库
<ivysettings>
<settings defaultResolver="default"/>
<!-- These "magic lines" are pulled from: https://ant.apache.org/ivy/history/latest-milestone/tutorial/defaultconf.html -->
<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"/>
<resolvers>
<!-- Custom Repos here -->
<ibiblio name="tmatesoft" m2compatible="true" root="https://maven.tmatesoft.com/content/repositories/releases/"/>
<!--<filesystem name="internal">-->
<!--<ivy pattern="$repository.dir/[module]/ivy-[revision].xml"/>-->
<!--<artifact pattern="$repository.dir/[module]/[artifact]-[revision].[ext]"/>-->
<!--</filesystem>-->
</resolvers>
<chain name="default" returnFirst="true" checkmodified="true" changingPattern=".*SNAPSHOT">
<!-- These two are magic lines from the default conf -->
<resolver ref="local"/>
<resolver ref="main" />
<!-- Custom Repos here -->
<resolver ref="tmatesoft" />
</chain>
<modules>
<module organisation="org.tmatesoft.hg4j" name=".*" resolver="tmatesoft"/>
</modules>
</ivysettings>
【讨论】:
以上是关于将公共 maven 存储库与 ivy 一起使用的主要内容,如果未能解决你的问题,请参考以下文章
Android 将 github 库与 maven 一起使用是不是安全