`
chelsea
  • 浏览: 119419 次
  • 来自: ...
社区版块
存档分类
最新评论

Ivy: 搭建本地仓库

    博客分类:
 
阅读更多

基本上, 搭建一个本地的ivy仓库, 包含两件独立的事情: 搭建仓库本身, 和配置如何使用这个仓库

 

仓库本身

Ivy的Repository是由一个个Module组成的, Module则包含自身的artifacts(通常是jar文件)和描述文件.

Module的描述文件是ivy的核心, 里面记录了这个module包含哪些artifacts和这个module对其它module的依赖. 这样就能顺藤摸瓜, 牵出所有的依赖来

<ivy-module version="1.0">

<info organisation="your.company" module="your.project" />

<configurations>

<conf name="release" />

<conf name="testing" extends="release" />

</configurations>

<publications>

<artifact name="common" />

<artifact name="client" />

<artifact name="server" />

</publications>

<dependencies defaultconf="release->default">

<dependency name="ant" rev="1.7.0" />

<dependency name="antlr" rev="2.7.6" />

<dependency name="xstream" rev="1.2.2" />

</dependencies>

</ivy-module>

仓库在文件系统上的结构, 可以由你自己决定, 只要在使用这个仓库时, 把它的布局信息用配置文件描述出来告诉使用者就可以了

 

如何使用这个仓库

基本上, 我们借助 Ant 来使用ivy, 那么我们需要告诉 Ant 一些repository相关的信息 : Where is the local repository, and How it looks like

<property name="ivy.local.default.root" location="/your/local/ivy/repository/folder" />

<ivy:settings id="ivy.instance" file="${ivy.local.default.root}/ivy.repository.settings.xml" />

那个ivy.repository.settings.xml就是来描述repository的布局的:

<ivysettings>

<settings defaultResolver="local" />

<resolvers>

<filesystem name="local" checkmodified="true">

<artifact pattern="${ivy.local.default.root}/[module]/[artifact].jar" />

<artifact pattern="${ivy.local.default.root}/[module]/[artifact]-[revision].jar" />

<ivy pattern="${ivy.local.default.root}/[module]/[module]-dependencies.xml" />

</filesystem>

</resolvers>

</ivysettings>

然后你告诉 Ant 你的项目的依赖和artifacts, Ant就可以帮你获得依赖和发布artifacts了

<property name="ivy.dep.file" location="${basedir}/my-module-dependencies.xml" />

<ivy:retrieve />

<!-- retrieve dependencies first, then compile, package, ... then publish-->

<ivy:publish resolver="local" pubrevision="1.0" overwrite="true" forcedeliver="true">

<artifacts pattern="${build.dir}/dist/[artifact].[ext]" />

<artifacts pattern="${basedir}/my-module-dependencies.xml" />

</ivy:publish>

那个my-module-dependencies.xml就是你的项目的依赖描述符, 事实上ivy也将它看作一个module,和repository里的module一视同仁. 参考最开始的例子.

 

Ivy 如何解决我们的问题

Q: 我的项目在开发环境和产品环境有不同的依赖, 怎么办?

A: Ivy 提供了"configuration" 的概念. 在那个my-module-dependencies.xml中, 你可以为你的module定义development和product两种配置, 可以指定每个artifact隶属于哪个配置, 指定每个dependency属于哪个配置. 注意这是一个递归定义, 因为你依赖的module也有可能定义了多个配置, 你需要指定你依赖于依赖的哪个配置,所以这是一个映射. 比如你的产品在运行环境中依赖于spring的产品环境:

<ivy-module version="1.0">

<info organisation="your.company" module="your.project" />

<configurations>

<conf name="product" />

<conf name="development" />

</configurations>

<dependencies defaultconf="product->default">

<dependency name="spring" rev="1.7.0" conf="release->product" />

<dependency name="antlr" rev="2.7.6" conf="development->debug" />

<dependency name="junit" rev="4.4" conf="development->release" />

</dependencies>

</ivy-module>

ivy 的各个Ant task允许你指定在哪个 configuration 上操作; 如为product配置取得所有依赖:

<ivy:retrieve conf="product" />

 

Q: 我的项目在开发环境和产品环境有太多相同的依赖, 事实上开发环境包含产品环境所有的依赖, 额外再加上junit,jmock等; 如何消除重复的依赖描述呢?

A: Ivy 提供了配置之间 "extends" , 也就是"继承"的概念, 你可以让开发环境的配置继承自产品环境的配置, 这样就可以复用产品环境的配置

<configurations>

<conf name="product" />

<conf name="development" extends="product" />

</configurations>

 

Q: 缺省ivy总是从缓存中读取配置, 这样我的依赖配置更新后却得不到反映; 怎么禁止从cache中读取配置?

A: <filesystem name="local" checkmodified="true">

分享到:
评论

相关推荐

    SBT ivy2 scala构建工具jar包

    2. `local`: 本地仓库,存放项目特有的或未发布的依赖。 3. `conf`: 可能包含SBT的配置文件,如`ivysettings.xml`,定义了仓库的位置和策略。 4. `log`: 存储构建过程中产生的日志信息。 总的来说,这个压缩包是...

    linux下搭建内网maven私服

    为了搭建内网 Maven 私服,需要下载和安装 Nexus 仓库管理工具,Nexus 是一个功能强大且灵活的仓库管理工具,支持 Maven、Gradle 和 Ivy 等构建工具。下面是搭建内网 Maven 私服的步骤: 1. 下载 Nexus 首先,需要...

    SBT ivy2 scala构建工具boot包

    Ivy2 在这里的作用是管理项目依赖,它可以从 Maven 中央仓库或其他指定的仓库下载所需的库,并将其组织到本地缓存中,供 SBT 在构建过程中使用。 标签中的“SBT”是 Scala Build Tool 的缩写,它是 Scala 开发者...

    nexus tar包(搭建maven私服)

    Nexus是Sonatype公司开发的一款强大的仓库管理器,它在Java和Maven社区中被广泛用作私有Maven仓库,用于托管内部项目构件、...同时,Nexus也可以作为其他工具(如Gradle、Ivy等)的仓库,实现多语言项目的统一管理。

    nexus-2.11

    《Nexus 2.11:打造你的Maven本地仓库》 Nexus是Sonatype公司推出的一款强大的软件仓库管理工具,特别适用于Java开发者,尤其是使用Maven构建项目的团队。Nexus 2.11版是其中的一个重要版本,它不仅提供了全面的...

    nexus-3.45.0-01-win64

    Maven私服,即本地搭建的Maven仓库服务器,主要功能是存储和管理项目依赖。在企业开发中,由于一些内部库或特定版本的库不便公开,或者为了提高依赖下载速度,就需要使用Maven私服。Nexus作为Maven私服,能够集中...

    nexus-2.11.1 bundle

    "nexus-2.11.1 bundle"是一个包含Nexus 2.11.1-01版本的完整包,适用于需要搭建本地Maven私服的用户。 Nexus的主要功能包括: 1. **代理仓库**:Nexus可以作为远程仓库的代理,将常用的第三方库缓存到本地,减少...

    gradle-6.9.1-bin.zip 压缩包-免费下载

    标题中的 "gradle-6.9.1-bin.zip" 指的是Gradle 6.9.1版本的二进制发行版的压缩包,该版本是2021年前后发布的一个稳定版本,适用于开发者快速地在本地环境中搭建Gradle。 **Gradle核心概念与特点** 1. **基于...

    Nutch1.7二次开发培训讲义

    - **过程:** 使用Eclipse通过Subclipse插件从SVN仓库检出Nutch 1.7的代码,需要指定正确的URL地址。 - **项目创建:** 创建Java项目,并命名,这里建议命名为“nutch1.7”。 **2. 文件编码与环境变量设置** - **编码...

    nexus-3.37.3-02-unix.tar.gz

    描述中提到“私服搭建需要”,意味着这个压缩包是为搭建本地或内部网络的 Nexus 服务器准备的,避免了从外部网络艰难下载的问题。将文件上传到 CSDN(China Software Developer Network)是为了方便其他用户获取和...

    gradle-5.0-all.zip和gradle-5.1-all和gradle-5.1.1-all.zip.zip

    这些zip文件通常包含了Gradle运行所需的全部组件,包括JAR文件、文档、示例代码等,方便开发者在本地环境快速搭建和使用Gradle。 **Gradle核心概念:** 1. **构建脚本**:Gradle使用Groovy或Kotlin编写构建脚本,...

    gradle-4.10-all.zip和gradle-4.10-bin.zip

    Gradle的依赖管理功能强大,能自动解决项目之间的依赖关系,并从Maven仓库或Ivy仓库下载所需库。 此外,Gradle还支持插件系统,有丰富的官方和第三方插件,如Spring Boot插件、Android插件等,可以极大地简化特定...

    apache-maven-3.3.9(1).zip

    Maven会自动从中央仓库或其他指定的远程仓库下载这些依赖,并将它们放入本地仓库。这使得共享和复用代码变得简单,因为每个项目只需要关注自身的直接依赖,而无需关心间接依赖的具体版本。 Maven的生命周期包括清理...

    gradle-5.6.4.zip

    在Gradle 5.6.4中,你可以方便地声明项目间的依赖关系,Gradle会自动解决这些依赖并下载到本地仓库。它支持Maven和 Ivy仓库,也可以自定义私有仓库。此外,Gradle的缓存机制可以重用已下载的库,减少构建时间。 3....

    gradle-2.8-bin.zip load

    这个压缩包包含了运行Gradle所需的全部文件,使得开发者无需编译源代码就能在本地环境中快速搭建和使用Gradle。 在描述中提到的“load”可能指的是加载或者安装Gradle到开发环境中。下面是关于Gradle 2.8的详细知识...

    apache-maven-3.6.1-bin.zip

    该文件定义了Maven的全局设置,如本地仓库路径、远程仓库配置、代理服务器等。 4. **lib** 目录:存储了Maven运行所需的所有依赖库,包括Apache Ivy、plexus组件和其他必要的JAR文件。 5. **LICENSE** 和 **NOTICE...

    gradle几个离线包

    5. **缓存和仓库**:Gradle 支持远程和本地Maven或 Ivy仓库,可以缓存依赖以减少网络请求。 对于开发者来说,选择合适的Gradle版本很重要。通常,你应该使用与项目所依赖的库和框架兼容的最新稳定版本。同时,定期...

    gradle-2.6-all.zip

    1. **依赖管理**:Gradle的依赖管理系统能够自动处理项目的依赖关系,可以从Maven仓库、 Ivy仓库或其他定制的仓库拉取所需的库。在离线模式下,有了"gradle-2.6-all.zip",开发者可以避免因网络问题而无法获取依赖的...

    在IDEA里gradle配置和使用的方法步骤

    2. `mavenLocal()`方法用于指定使用Maven本地仓库,通常在Maven的setting.xml中指定本地仓库位置。 3. `maven{url "***"}`等方法用于添加特定的远程仓库URL,例如使用阿里云镜像加速下载。 4. `mavenCentral()`方法...

    gradle.docx

    4. **依赖管理**:Gradle内置了强大的依赖管理功能,基于Apache Ivy,支持Maven和Ivy仓库结构。 5. **支持现有构建工具**:Gradle能够无缝集成Ant任务和构建脚本,使其成为构建过程的一部分。 6. **Groovy构建脚本**...

Global site tag (gtag.js) - Google Analytics