Apache IVY - 快速指南


Apache IVY - 概述

Apache Ivy 是一个非常流行且非常强大的依赖关系管理工具,用于以与 Apache Maven 管理依赖关系相同的方式管理基于 ANT 的项目中的依赖关系。

Apache Ivy 基于 Apache ANT,遵循相同的设计原则,是 Apache ANT 的子项目,并由 Apache ANT 社区积极管理和支持。

特征

以下是 Apache Ivy 的重要特性。

  • 基于 ANT - Apache Ivy 为基于 ANT 的项目提供依赖管理功能。使用起来也非常简单。

  • 依赖关系报告- Apache Ivy 提供了以 html 和报告格式打印依赖关系图的选项。

  • 非侵入式- Apache Ivy 不会对分发的一部分施加任何限制。甚至构建文件也不依赖于 Apache Ivy。

  • 高度灵活- Apache Ivy 提供了大量默认配置,可以非常轻松地根据要求进行配置。

  • 可扩展- Apache Ivy 可以轻松扩展。您可以定义自己的存储库、冲突解决程序和最新策略。

  • 性能- Apache Ivy 是为了性能而构建的。它保留已下载的库的缓存。首先查看本地存储库来解决依赖关系,而不是查看其他存储库。

  • 传递依赖项- 如果一个项目或库依赖于可能需要另一个库的其他库,Apache Ivy 会自动管理传递依赖项。

  • Maven 存储库- Apache Ivy 遵循类似于 Maven 存储库约定的约定。Apache Ivy 可以使用 Maven 全局存储库解决依赖关系。

  • Maven 2 POM - Apache Ivy 可以读取 Maven 2 POM 作为模块描述符,可以将 ivy 设置为模块描述符。因此,可以轻松地将现有项目迁移到 IVY 管理的项目。

  • 发布- Apache Ivy 提供发布项目的支持并简化多项目环境部署过程。

  • 免费使用- Apache Ivy 是开源的并且可以免费使用。

  • 文档- Apache Ivy 有非常详细的文档和教程可供学习。

Apache IVY - 环境设置

Apache Ivy 需要在您的计算机上安装 Java 和 ANT 作为唯一要求。

Apache Ant 根据 Apache 软件许可证进行分发,这是一个经过开源倡议认证的成熟开源许可证。

最新的 Apache Ant 版本,包括其完整源代码、类文件和文档,可以在 http://ant.apache.org 上找到

安装 Apache Ant

假设您已经在计算机上下载并安装了 Java Development Kit (JDK)。如果没有,请按照此处的说明进行操作。

  • 确保 JAVA_HOME 环境变量设置为安装 JDK 的文件夹。

  • 从https://ant.apache.org下载二进制文件

  • 将 zip 文件解压缩到方便的位置 c:\folder。使用 Winzip、winRAR、7-zip 或类似工具。

  • 创建一个名为ANT_HOME 的新环境变量,该变量指向 Ant 安装文件夹,在本例中为c:\apache-ant-1.10.12-bin文件夹。

  • 将 Apache Ant 批处理文件的路径附加到 PATH 环境变量。在我们的例子中,这将是c:\apache-ant-1.10.12-bin\bin文件夹。

验证 Apache Ant 安装

要验证您的计算机上是否已成功安装 Apache Ant,请在命令提示符下键入 ant。

您应该看到类似于以下内容的输出 -

C:\>ant -version
Apache Ant(TM) version 1.10.12 compiled on October 13 2021

如果您没有看到上述输出,请验证您是否正确遵循了安装步骤。

安装 Apache Ivy

  • 从https://ant.apache.org/ivy下载二进制文件

  • 将 zip 文件解压缩到方便的位置 c:\folder。使用 Winzip、winRAR、7-zip 或类似工具。

  • 将 ivy-2.5.0.jar 复制到c:\apache-ant-1.10.12-bin/lib文件夹。

验证 Apache Ivy 安装

要验证 Apache Ivy 是否在您的计算机上成功安装,请在文件夹 E: > ivy 中创建以下构建文件。

<project name="test ivy installation" 
   default="test" xmlns:ivy="antlib:org.apache.ivy.ant">
   <target name="test" description="Test ivy installation">
      <ivy:settings />
   </target>
</project>

您应该看到类似于以下内容的输出 -

C:\>ant
Buildfile: E:\ivy\build.xml

test:

BUILD SUCCESSFUL
Total time: 2 seconds

安装Eclipse

本教程还介绍了 Ant 与 Eclipse IDE 的集成。因此,如果您尚未安装 Eclipse,请下载并安装 Eclipse

安装 Eclipse -

  • 从www.eclipse.org下载最新的 Eclipse 二进制文件

  • 将 Eclipse 二进制文件解压缩到一个方便的位置,例如 c:\folder

  • 从 c:\eclipse\eclipse.exe 运行 Eclipse

Apache IVY - 术语

请考虑以下示例 ivy.xml 以了解 Ivy 术语。

<?xml version="1.0" encoding="ISO-8859-1"?>
<ivy-module version="2.0"
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xsi:noNamespaceSchemaLocation="http://ant.apache.org/ivy/schemas/ivy.xsd">
   <info organisation="com.tutorialspoint" module="ivy-test" status="integration">
   </info>
   <dependencies>
      <dependency org="commons-lang" name="commons-lang" rev="2.6" />
   </dependencies>
</ivy-module>

常春藤条款

以下是Ivy生态系统的重要术语。

  • 组织- 顾名思义,它指的是创建项目或库的公司、个人开发人员或团队名称。例如,com.tutorialspoint。

  • 模块- 顾名思义,它指的是可重用的单元或模块。模块通常有一个附加的版本。例如 commons-lang 或 ivy-test 等。

  • 模块描述符- 模块描述符是指描述模块的ivy.xml 文件。模块描述符包含标识符(组织、名称、分支和版本)、发布的工件、配置和依赖项。

  • Artifact - Artifact 是指可交付的单个文件。例如,一个 jar 文件。工件的类型可以是:zip、gz 等。Jar、Source Jar、Javadoc Jar 是模块的各种工件。

  • Type - 类型标识工件类别,如 jar、war、src、doc 等。

  • Artifact 文件扩展名- Artifact 扩展名,如 .jar、、zip、.gz 等。

  • 模块修订版- 模块的唯一修订号或其版本号。

  • 修订状态- 修订状态表明修订的稳定性。以下是地位的重要价值 -

    • 集成- 代表持续开发、夜间构建等。

    • 里程碑- 代表分发但尚未最终确定。

    • 发布- 代表经过测试和完成的主要版本。

  • 存储库- 与 Maven 存储库类似,存储库代表一个分发站点,ivy 可以在其中搜索库、工件、模块等。存储库可以是公共的、私有的或共享的。

  • Ivy 设置- Apache Ivy 遵循 Maven 原则并附带许多默认配置。可以通过定义 ivysettings.xml 文件来覆盖默认设置。

Apache IVY - 设置文件

Apache Ivy 遵循 Maven 原则并附带许多默认配置。可以通过定义 ivysettings.xml 文件来覆盖默认设置。

<ivysettings>
   <properties file="${ivy.settings.dir}/ivysettings-file.properties" />
   <settings defaultCache="${cache.dir}" defaultResolver="ibiblio" checkUpToDate="false" />
   <resolvers>
      <ibiblio name="ibiblio" />
      <filesystem name="internal">
         <ivy pattern="${repository.dir}/[module]/ivy-[revision].xml" />
         <artifact pattern="${repository.dir}/[module]/[artifact]-[revision].[ext]" />
      </filesystem>
   </resolvers>
   <modules>
      <module organisation="tutorialspoint" name=".*" resolver="internal" />
   </modules>
</ivysettings>

Ivy设置文件的标签

以下是ivy设置文件的重要标签。

  • property - 设置 ivy 变量。基数:0..n

  • 属性- 使用属性文件设置 ivy 变量。基数:0..n

  • settings - 使用默认值配置ivy。基数:0..1

  • include - 包含另一个设置文件。基数:0..n

  • classpath - 在类路径中添加用于加载插件的位置。基数:0..n

  • typedef - 在ivy中定义新类型。基数:0..n

  • 锁定策略- 定义锁定策略。基数:0..1

  • 缓存- 定义存储库缓存管理器。基数:0..1

  • 最新策略- 定义最新策略。基数:0..1

  • parsers - 定义模块描述符解析器。基数:0..1

  • version-matchers - 定义新版本匹配器。基数:0..1

  • 触发器- 注册 ivy 事件的触发器。基数:0..1

  • 命名空间- 定义新的命名空间。基数:0..1

  • Macrodef - 定义一个新的宏解析器。基数:0..n

  • 解析器- 定义依赖解析器。基数:0..1

  • 冲突管理器- 定义冲突管理器。基数:0..1

  • 模块- 定义模块和依赖解析器之间的规则。基数:0..1

  • 输出器- 定义可用报告输出器的列表。基数:0..1

  • statuses - 定义可用状态列表。基数:0..1

Apache IVY - Eclipse Ivy 插件

IvyDE是Apache提供的Eclipse插件。要安装 IvyDE,请启动 Eclipse 并导航到“帮助”>“安装新软件”。它显示可用软件窗口。进入 IvyDE 更新站点http://www.apache.org/dist/ant/ivyde/updatesite/并按 Enter 键。它显示以下插件。

可用软件

单击“下一步”,您将看到以下屏幕。

安装步骤

如果您在安装插件时遇到任何错误,只需重新启动该过程即可。安装成功后,您将在eclipe中看到该插件。

常春藤插件

现在您可以使用 Eclipse 和 Ivy 进行依赖关系管理。

Apache IVY - 解决任务

Resolve任务用于解析ivy.xml中描述的依赖项,下载并放入ivy缓存中。

首先,我们在E: > ivy > src > com >tutorialspoint文件夹中创建一个 java 文件 Tester.java,该文件夹将作为 ant 项目的源文件夹。

应用程序.java

package com.tutorialspoint;
import org.apache.commons.lang.StringUtils;
public class Application {
   public static void main(String[] args) {
      String string = StringUtils.upperCase("Ivy Beginner Guide");
      System.out.println(string);
   }
}

上面的类使用apache commons lang库来使用它的类StringUtils。ivy 应该下载这个库,因此它应该在 ivy.xml 的依赖项部分下定义。以下是在E:>ivy文件夹中创建的ivy.xml 。

常春藤.xml

<?xml version="1.0" encoding="ISO-8859-1"?>
<ivy-module version="2.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xsi:noNamespaceSchemaLocation="http://ant.apache.org/ivy/schemas/ivy.xsd">
   <info
      organisation="com.tutorialspoint"
      module="test"
      status="integration">
   </info>
   <dependencies>
      <dependency org="org.apache.commons" name="commons-lang3" rev="3.9"/>
   </dependencies>
</ivy-module>

以下是重要术语。

  • ivy-module - 用于识别ivy版本、命名空间等的根元素。

  • info - 将项目标识为唯一实体的元素。

    • 组织- 组织名称

    • 模块- 模块的名称

    • status - 状态,如发布、集成或里程碑。

  • 依赖项- 将项目依赖项包含为具有以下属性的依赖项标签的元素。

    • org - 依赖项组织的名称

    • name - 依赖项的名称。

    • rev - 依赖项的版本。

构建.xml

<project name="test" default="resolve" xmlns:ivy="antlib:org.apache.ivy.ant">
   <target name="resolve" description="resolve dependencies">
      <ivy:resolve />
   </target>
</project<

以下是重要术语。

  • project - 用于标识项目名称、ivy 等的默认任务命名空间的根元素。

  • target - 创建新任务的目标元素及其描述。这包含一个 ivy 解析任务。当ant构建项目时,它会运行ivy解析任务,然后使用ivy解析依赖项。

构建项目

因为我们已经准备好了所有文件。只需进入控制台即可。导航到E:> ivy文件夹并运行 ant 命令。

E:\ivy > ant

Ivy 将开始行动,解决依赖关系,您将看到以下结果。

Buildfile: E:\ivy\build.xml
resolve:
[ivy:resolve] :: Apache Ivy 2.5.0 - 20191020104435 :: https://ant.apache.org/ivy
/ ::
[ivy:resolve] :: loading settings :: url = jar:file:/E:/Apache/apache-ant-1.9.14
/lib/ivy-2.5.0.jar!/org/apache/ivy/core/settings/ivysettings.xml
[ivy:resolve] :: resolving dependencies :: com.tutorialspoint#test;working@Acer-
PC
[ivy:resolve]   confs: [default]
[ivy:resolve]   found commons-lang#commons-lang;2.6 in public
[ivy:resolve]   found junit#junit;3.8.1 in public
[ivy:resolve] :: resolution report :: resolve 375ms :: artifacts dl 79ms
      ---------------------------------------------------------------------
      |                  |            modules            ||   artifacts   |
      |       conf       | number| search|dwnlded|evicted|| number|dwnlded|
      ---------------------------------------------------------------------
      |      default     |   2   |   2   |   0   |   0   ||   4   |   0   |
      ---------------------------------------------------------------------
[ivy:retrieve] :: retrieving :: com.tutorialspoint#test [sync]
[ivy:retrieve]  confs: [default]
[ivy:retrieve]  0 artifacts copied, 2 already retrieved (0kB/101ms)
BUILD SUCCESSFUL
Total time: 1 second
E:\ivy>

解析输出

以下是重要术语。

  • conf - 配置,在我们的例子中我们使用默认配置。

  • 模块- 表示模块总数、下载模块等。

  • 工件- 表示工件、下载的工件等的总数。

您可以在 ivy 缓存的默认位置${ivy.default.ivy.user.dir} > .ivy2 > 缓存文件夹中验证下载的文件。${ivy.default.ivy.user.dir} 默认是用户 home:$HOME。

Apache IVY - 安装任务

安装任务用于在解析器中安装模块及其依赖项。当要下载公共工件并在私有存储库中使用时使用它。默认情况下,用户本地存储库是他/她的私有存储库,位于 ${ivy.default.ivy.user.dir}/local 中。

让我们按照IVY - 解决任务章节中的描述创建 Tester.java、build.xml 和 ivy.xml。

更新 build.xml 以使用 ivy 安装任务。

构建.xml

<project name="test" default="resolve" xmlns:ivy="antlib:org.apache.ivy.ant">
   <target name="resolve" description="resolve dependencies">
      <ivy:resolve />
   </target>
   <target name="install" description="install dependencies">
      <ivy:install organisation="commons-lang" module="commons-lang" 
         revision="2.6" transitive="true" overwrite="false" 
         from="public" to="local" />
   </target>
</project>

以下是重要术语。

  • 组织- 组织名称。

  • module - 项目的模块名称。

  • 修订版- 项目的版本。

  • from - 来自存储库类型。

  • to - 存储库类型。

构建项目

因为我们已经准备好了所有文件。只需进入控制台即可。导航到E:> ivy文件夹并运行 ant 命令。

E:\ivy > ant install

Ivy 将开始行动,解决依赖关系,您将看到以下结果。

E:\ivy > ant install
Buildfile: E:\ivy\build.xml
install:
[ivy:install] :: Apache Ivy 2.5.0 - 20191020104435 :: https://ant.apache.org/ivy
/ ::
[ivy:install] :: loading settings :: url = jar:file:/E:/Apache/apache-ant-1.9.14
/lib/ivy-2.5.0.jar!/org/apache/ivy/core/settings/ivysettings.xml
[ivy:install] :: installing commons-lang#commons-lang;2.6 ::
[ivy:install] :: resolving dependencies ::
[ivy:install]   found commons-lang#commons-lang;2.6 in public
[ivy:install]   found junit#junit;3.8.1 in public
[ivy:install] :: downloading artifacts to cache ::
[ivy:install] :: installing in local ::
[ivy:install]   published commons-lang to C:\Users\Acer\.ivy2\local\commons-lang
\commons-lang\2.6.part\sources\commons-lang.jar
[ivy:install]   published commons-lang to C:\Users\Acer\.ivy2\local\commons-lang
\commons-lang\2.6.part\jars\commons-lang.jar
[ivy:install]   published commons-lang to C:\Users\Acer\.ivy2\local\commons-lang
\commons-lang\2.6.part\javadocs\commons-lang.jar
[ivy:install]   published ivy to C:\Users\Acer\.ivy2\local\commons-lang\commons-
lang\2.6.part\ivys\ivy.xml
[ivy:install]   publish committed: moved C:\Users\Acer\.ivy2\local\commons-lang\
commons-lang\2.6.part
[ivy:install]           to C:\Users\Acer\.ivy2\local\commons-lang\commons-lang\2
.6
[ivy:install]   published junit to C:\Users\Acer\.ivy2\local\junit\junit\3.8.1.p
art\jars\junit.jar
[ivy:install]   published ivy to C:\Users\Acer\.ivy2\local\junit\junit\3.8.1.par
t\ivys\ivy.xml
[ivy:install]   publish committed: moved C:\Users\Acer\.ivy2\local\junit\junit\3
.8.1.part
[ivy:install]           to C:\Users\Acer\.ivy2\local\junit\junit\3.8.1
[ivy:install] :: install resolution report ::
[ivy:install] :: resolution report :: resolve 0ms :: artifacts dl 21ms
      ---------------------------------------------------------------------
      |                  |            modules            ||   artifacts   |
      |       conf       | number| search|dwnlded|evicted|| number|dwnlded|
      ---------------------------------------------------------------------
      |      default     |   2   |   0   |   0   |   0   ||   4   |   0   |
      ---------------------------------------------------------------------
BUILD SUCCESSFUL
Total time: 43 seconds

您可以在 ivy 缓存的默认本地存储库位置${ivy.default.ivy.user.dir} > .ivy2 > local目录中验证下载的文件。

Apache IVY - 检索任务

检索任务用于将依赖项解析到项目工作区中的指定位置。

让我们按照IVY - 解决任务章节中的描述创建 Tester.java、build.xml 和 ivy.xml。

更新 build.xml 以使用 ivy 检索任务。

构建.xml

<project name="test" default="resolve" xmlns:ivy="antlib:org.apache.ivy.ant">
   <target name="resolve" description="resolve dependencies">
      <ivy:resolve />
      <ivy:retrieve sync="true" type="jar" />
   </target>
</project>

以下是重要术语。

  • 同步- 同步 true 确保 lib 目录是最新的并且任何额外的文件都会被删除。

  • type - type 指示 ivy 仅复制指定类型的工件,例如 jar。源 jar、javadoc jar 将被忽略。源jar 的类型是src 或source,javadoc jar 的类型是doc 或bundle。

检索任务默认将已解析的依赖项复制到项目的 lib 目录中,并且可以使用模式属性进行更改。

构建项目

因为我们已经准备好了所有文件。只需进入控制台即可。导航到E:> ivy文件夹并运行 ant 命令。

E:\ivy > ant

Ivy 将开始行动,解决依赖关系,您将看到以下结果。

Buildfile: E:\ivy\build.xml
resolve:
[ivy:resolve] :: Apache Ivy 2.5.0 - 20191020104435 :: https://ant.apache.org/ivy
/ ::
[ivy:resolve] :: loading settings :: url = jar:file:/E:/Apache/apache-ant-1.9.14
/lib/ivy-2.5.0.jar!/org/apache/ivy/core/settings/ivysettings.xml
[ivy:resolve] :: resolving dependencies :: com.tutorialspoint#test;working@Acer-
PC
[ivy:resolve]   confs: [default]
[ivy:resolve]   found commons-lang#commons-lang;2.6 in public
[ivy:resolve]   found junit#junit;3.8.1 in public
[ivy:resolve] :: resolution report :: resolve 316ms :: artifacts dl 18ms
      ---------------------------------------------------------------------
      |                  |            modules            ||   artifacts   |
      |       conf       | number| search|dwnlded|evicted|| number|dwnlded|
      ---------------------------------------------------------------------
      |      default     |   2   |   2   |   0   |   0   ||   4   |   0   |
      ---------------------------------------------------------------------
[ivy:retrieve] :: retrieving :: com.tutorialspoint#test [sync]
[ivy:retrieve]  confs: [default]
[ivy:retrieve]  0 artifacts copied, 2 already retrieved (0kB/2756ms)
BUILD SUCCESSFUL
Total time: 31 seconds

您可以在项目 lib 目录中验证下载的文件。

Apache IVY - 缓存路径任务

cachepath 任务用于创建 ANT 类路径,其中已解析的工件存在于缓存中。由于 ANT 需要 jars 作为类路径来编译 java 文件,因此 Ivy cachepath 构建了类路径。

让我们按照IVY - 解决任务章节中的描述创建 Tester.java、build.xml 和 ivy.xml。

更新 build.xml 以使用 ivy 检索任务。

构建.xml

<project name="test" default="resolve" xmlns:ivy="antlib:org.apache.ivy.ant">
   <target name="resolve" description="resolve dependencies">
      <ivy:resolve />
      <ivy:cachepath pathid="new.classpath" />
   </target>
   <target name="compile" depends="resolve" description="Compile">
      <mkdir dir="build/classes" />
      <javac srcdir="src" destdir="build/classes">
         <classpath refid="new.classpath" />
      </javac>
   </target>
</project>

以下是重要术语。

  • pathid - 存在缓存 jar 的类路径的 id。

检索任务默认将已解析的依赖项复制到项目的 lib 目录中,并且可以使用模式属性进行更改。

构建项目

因为我们已经准备好了所有文件。只需进入控制台即可。导航到E:> ivy文件夹并运行 ant 命令。

E:\ivy > ant compile

Ivy 将开始行动,解决依赖关系,您将看到以下结果。

Buildfile: E:\ivy\build.xml
resolve:
[ivy:resolve] :: Apache Ivy 2.5.0 - 20191020104435 :: https://ant.apache.org/ivy
/ ::
[ivy:resolve] :: loading settings :: url = jar:file:/E:/Apache/apache-ant-1.9.14
/lib/ivy-2.5.0.jar!/org/apache/ivy/core/settings/ivysettings.xml
[ivy:resolve] :: resolving dependencies :: com.tutorialspoint#test;working@Acer-
PC
[ivy:resolve]   confs: [default]
[ivy:resolve]   found commons-lang#commons-lang;2.6 in public
[ivy:resolve]   found junit#junit;3.8.1 in public
[ivy:resolve] :: resolution report :: resolve 2314ms :: artifacts dl 15ms
      ---------------------------------------------------------------------
      |                  |            modules            ||   artifacts   |
      |       conf       | number| search|dwnlded|evicted|| number|dwnlded|
      ---------------------------------------------------------------------
      |      default     |   2   |   2   |   0   |   0   ||   4   |   0   |
      ---------------------------------------------------------------------
compile:
   [javac] E:\ivy\build.xml:13: warning: 'includeantruntime' was not set, defau
lting to build.sysclasspath=last; set to false for repeatable builds
   [javac] Compiling 1 source file to E:\ivy\build\classes
BUILD SUCCESSFUL
Total time: 3 seconds

您可以在项目构建目录中验证编译后的类文件。

Apache IVY - 发布任务

发布任务用于将当前工件及其解析的描述符文件发布到提到的存储库。

让我们按照IVY - 解决任务章节中的描述创建 Tester.java、build.xml 和 ivy.xml。

更新 build.xml 以使用 ivy 发布任务。首先我们将创建一个 jar 文件,然后发布它。

构建.xml

<project name="test" default="resolve" xmlns:ivy="antlib:org.apache.ivy.ant">
   <property name = "build.dir" value = "build"/>
   <target name="resolve" description="resolve dependencies">
      <ivy:resolve />
   </target>
   <target name = "jar">
      <jar destfile = "${build.dir}/lib/application.jar"
         basedir = "${build.dir}/classes">      
         <manifest>
            <attribute name = "Main-Class" value = "com.tutorialspoint.Application"/>
         </manifest>
      </jar>
   </target>
   <target name="publish" depends="jar">
      <ivy:resolve />
      <ivy:publish resolver="local" pubrevision="1.0" overwrite="true">
         <artifacts pattern="${build.dir}/lib/[artifact].[ext]" />
      </ivy:publish>   
   </target>
</project>

以下是重要术语。

  • 解析器- 用于发布的解析器。

  • 模式- 定位工件的模式。

这里的发布任务首先构建jar,然后解决依赖关系,设置信息,然后将工件发布到本地存储库。

构建项目

因为我们已经准备好了所有文件。只需进入控制台即可。导航到E:> ivy文件夹并运行 ant 命令。

E:\ivy > ant publish

Ivy 将开始行动,解决依赖关系,您将看到以下结果。

E:\ivy > ant publish
Buildfile: E:\ivy\build.xml
jar:
publish:
[ivy:resolve] :: Apache Ivy 2.5.0 - 20191020104435 :: https://ant.apache.org/ivy
/ ::
[ivy:resolve] :: loading settings :: url = jar:file:/E:/Apache/apache-ant-1.9.14
/lib/ivy-2.5.0.jar!/org/apache/ivy/core/settings/ivysettings.xml
[ivy:resolve] :: resolving dependencies :: com.tutorialspoint#test;1.0.0
[ivy:resolve]   confs: [default]
[ivy:resolve]   found commons-lang#commons-lang;2.6 in public
[ivy:resolve]   found junit#junit;3.8.1 in public
[ivy:resolve] :: resolution report :: resolve 121ms :: artifacts dl 15ms
      ---------------------------------------------------------------------
      |                  |            modules            ||   artifacts   |
      |       conf       | number| search|dwnlded|evicted|| number|dwnlded|
      ---------------------------------------------------------------------
      |      default     |   2   |   2   |   0   |   0   ||   4   |   0   |
      ---------------------------------------------------------------------
[ivy:publish] :: publishing :: com.tutorialspoint#test
[ivy:publish]   published application to C:\Users\Acer\.ivy2\local\com.tutorials
point\test\1.0\jars\application.jar
[ivy:publish]   published ivy to C:\Users\Acer\.ivy2\local\com.tutorialspoint\te
st\1.0\ivys\ivy.xml
BUILD SUCCESSFUL
Total time: 1 second

您可以在本地存储库中验证发布 ivy 工件。

Apache IVY - 信息任务

info 任务用于在文件中设置 ivy 特定信息,并且可以在没有任何依赖解析的情况下使用。

让我们按照IVY - 解决任务章节中的描述创建 Tester.java、build.xml 和 ivy.xml。

更新 build.xml 以使用 ivy 发布任务。首先我们将创建一个 jar 文件,然后发布它。在发布任务之前,我们已经使用 info 任务设置了所需的 ivy 信息。

构建.xml

<project name="test" default="resolve" xmlns:ivy="antlib:org.apache.ivy.ant">
   <property name = "build.dir" value = "build"/>
   <target name="resolve" description="resolve dependencies">
      <ivy:resolve />
   </target>
   <target name = "jar">
      <jar destfile = "${build.dir}/lib/application.jar"
         basedir = "${build.dir}/classes">      
         <manifest>
            <attribute name = "Main-Class" value = "com.tutorialspoint.Application"/>
         </manifest>
      </jar>
   </target>
   <target name="publish" depends="jar">
      <ivy:info file="ivy.xml" />
      <ivy:publish resolver="local" pubrevision="1.0" overwrite="true">
         <artifacts pattern="${build.dir}/lib/[artifact].[ext]" />
      </ivy:publish>   
   </target>
</project>

这里发布任务首先构建 jar,然后使用 ivy:info 任务设置信息,然后将工件发布到本地存储库。

构建项目

因为我们已经准备好了所有文件。只需进入控制台即可。导航到E:> ivy文件夹并运行 ant 命令。

E:\ivy > ant publish

Ivy 将开始行动,解决依赖关系,您将看到以下结果。

Buildfile: E:\ivy\build.xml
jar:
publish:
 [ivy:info] :: Apache Ivy 2.5.0 - 20191020104435 :: https://ant.apache.org/ivy/
::
 [ivy:info] :: loading settings :: url = jar:file:/E:/Apache/apache-ant-1.9.14/l
ib/ivy-2.5.0.jar!/org/apache/ivy/core/settings/ivysettings.xml
[ivy:publish] :: publishing :: com.tutorialspoint#test
[ivy:publish]   published application to C:\Users\Acer\.ivy2\local\com.tutorials
point\test\1.0\jars\application.jar
[ivy:publish]   published ivy to C:\Users\Acer\.ivy2\local\com.tutorialspoint\te
st\1.0\ivys\ivy.xml
BUILD SUCCESSFUL
Total time: 0 seconds

如果我们不放置信息任务,那么发布任务将不起作用。使用下面修改后的build.xml,查看缺少组织属性等错误。

构建.xml

<project name="test" default="resolve" xmlns:ivy="antlib:org.apache.ivy.ant">
   <property name = "build.dir" value = "build"/>
   <target name="resolve" description="resolve dependencies">
      <ivy:resolve />
   </target>
   <target name = "jar">
      <jar destfile = "${build.dir}/lib/application.jar"
         basedir = "${build.dir}/classes">      
         <manifest>
            <attribute name = "Main-Class" value = "com.tutorialspoint.Application"/>
         </manifest>
      </jar>
   </target>
   <target name="publish" depends="jar">
      <ivy:publish resolver="local" pubrevision="1.0" overwrite="true">
         <artifacts pattern="${build.dir}/lib/[artifact].[ext]" />
      </ivy:publish>   
   </target>
</project>

导航到E:> ivy文件夹并运行 ant 命令。

E:\ivy > ant publish

Ivy 将开始行动,解决依赖关系,您将看到以下结果。

Buildfile: E:\ivy\build.xml
jar:
publish:
[ivy:publish] :: Apache Ivy 2.5.0 - 20191020104435 :: https://ant.apache.org/ivy
/ ::
[ivy:publish] :: loading settings :: url = jar:file:/E:/Apache/apache-ant-1.9.14
/lib/ivy-2.5.0.jar!/org/apache/ivy/core/settings/ivysettings.xml
BUILD FAILED
E:\ivy\build.xml:28: no organisation provided for ivy publish task: It can eithe
r be set explicitly via the attribute 'organisation' or via 'ivy.organisation' p
roperty or a prior call to <resolve/>
Total time: 3 seconds

Apache IVY - 解析器

解析器用于查找要下载库的位置。依赖关系解析器还处理常见任务。Ivy 提供两种类型的解析器。

  • 复合- 使用其他解析器来完成其任务的解析器。

  • 标准- 解析器执行所需的任务。

标准旋转变压器

下表列出了标准解析器及其用法。

先生。 名称(类型)和描述
1

IvyRep(标准)

在 ivyrep 上找到 Ivy 文件,在 ibiblio 上找到工件。
2

IBiblio(标准)

在 ibiblio 上找到文物。
3

垃圾箱(标准)

定位 bintray 上的工件。
4

包装机(标准)

通过 URL 定位 Ivy 文件和打包说明,使用说明创建工件。
5

文件系统(标准)

定位本地文件系统上的 Ivy 文件和工件。
6

网址(标准)

定位存储库上的 Ivy 文件和工件,可以使用 URL 访问这些文件和工件。
7

镜像URL(标准)

定位存储库上的 Ivy 文件和工件,可以使用镜像列表中的 URL 访问这些文件和工件。
8

VFS(标准)

定位存储库上的 Ivy 文件和工件,可以使用 Apache Commons VFS 访问这些文件和工件。
9

SSH(标准)

找到可以使用 SSH 访问的存储库上的 Ivy 文件和工件。
10

SFTP(标准)

定位存储库上的 Ivy 文件和工件,可以使用 SFTP 访问这些文件和工件。
11

罐子(标准)

在 jar 内的存储库中查找 Ivy 文件和工件。
12

链条(复合)

将搜索委托给一系列子解析器。
13

双(复合)

将搜索委托给一个解析器,并将工件委托给另一个解析器。
14

OBR(标准)

将模块解析为 OSGi obr.xml 列出的 OSGi 捆绑包。
15

Eclipse 更新站点(标准)

将模块解析为托管在 Eclipse 更新站点上的 OSGi 捆绑包。
16

OSGi-agg(复合)

将搜索委托给支持 OSGi 包的子解析器链。

让我们在E:> ivy2文件夹下的新项目中创建 Tester.java、build.xml 和 ivy.xml,类似于IVY - 解决任务章节中所述。在E:> ivy2下创建一个 settings 文件夹。在设置文件夹中创建 ivysettings.xml。

构建.xml

<project name="test" default="resolve" xmlns:ivy="antlib:org.apache.ivy.ant">
   <property name = "build.dir" value = "build"/>
   <property name = "base.dir" value = ""/>
   <target name="resolve" description="resolve dependencies">
      <ivy:resolve />
   </target>
   <target name="compile" depends="resolve" description="Compile">
      <mkdir dir="build/classes" />
      <javac srcdir="src" destdir="build/classes">
         <classpath refid="new.classpath" />
      </javac>
   </target>
</project>

常春藤.xml

<?xml version="1.0" encoding="ISO-8859-1"?>
<ivy-module version="2.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xsi:noNamespaceSchemaLocation="http://ant.apache.org/ivy/schemas/ivy.xsd">
   <info organisation="org.apache" module="chained-resolvers"/>
   <dependencies>
      <dependency org="commons-lang" name="commons-lang" rev="2.6" conf="default"/>
      <dependency org="com.tutorialspoint" name="test" rev="1.0"/>
   </dependencies>
</ivy-module>

这里我们添加了两个依赖项,一个是 commons-lang 库,另一个是我们在IVY - 发布任务章节中发布的测试。

ivy设置.xml

<ivysettings>
   <settings defaultResolver="multiresolver"/>
   <resolvers>
      <chain name="multiresolver">
         <filesystem name="libraries">
            <artifact pattern="${ivy.settings.dir}/repository/[artifact]-[revision].[ext]"/>
         </filesystem>
         <ibiblio name="ibiblio" m2compatible="true"/>
      </chain>
   </resolvers>
</ivysettings>

在这里,我们添加了使用链解析器创建的复合解析器,它有两个解析器,一个命名库用于在本地存储库上查找库,另一个名为 ibiblio 在 maven 公共存储库上。

构建项目

因为我们已经准备好了所有文件。只需进入控制台即可。导航到E:> ivy2文件夹并运行 ant 命令。

E:\ivy > ant

Ivy 将开始行动,解决依赖关系,您将看到以下结果。

Buildfile: E:\ivy2\build.xml
resolve:
[ivy:resolve] :: Apache Ivy 2.5.0 - 20191020104435 :: https://ant.apache.org/ivy
/ ::
[ivy:resolve] :: loading settings :: url = jar:file:/E:/Apache/apache-ant-1.9.14
/lib/ivy-2.5.0.jar!/org/apache/ivy/core/settings/ivysettings.xml
[ivy:resolve] :: resolving dependencies :: org.apache#chained-resolvers;working@
Acer-PC
[ivy:resolve]   confs: [default]
[ivy:resolve]   found commons-lang#commons-lang;2.6 in public
[ivy:resolve]   found com.tutorialspoint#test;1.0 in local
[ivy:resolve]   found junit#junit;3.8.1 in public
[ivy:resolve] downloading C:\Users\Acer\.ivy2\local\com.tutorialspoint\test\1.0\
jars\application.jar ...
[ivy:resolve] .. (1kB)
[ivy:resolve] .. (0kB)
[ivy:resolve]   [SUCCESSFUL ] com.tutorialspoint#test;1.0!application.jar (13ms)
[ivy:resolve] :: resolution report :: resolve 1085ms :: artifacts dl 22ms
      ---------------------------------------------------------------------
      |                  |            modules            ||   artifacts   |
      |       conf       | number| search|dwnlded|evicted|| number|dwnlded|
      ---------------------------------------------------------------------
      |      default     |   3   |   3   |   1   |   0   ||   5   |   1   |
      ---------------------------------------------------------------------
BUILD SUCCESSFUL
Total time: 9 seconds

在日志中,您可以验证我们是否使用了本地和公共存储库解析器。

Apache IVY - 本地存储库

本地存储库是用户的私有存储库。当用户使用的库的版本已在其他地方更改并且发生重大更改时,它非常有用。对于本地存储库,ivy 将使用本地存在的库(如果找到),并且不会查找公共或共享存储库。

默认位置

默认情况下,本地存储库位于 ${ivy.default.ivy.user.dir}/local 文件夹中。如果要更改它,请使用 ant 文件中的 ivy.local.default.root 变量。

构建.xml

<target name="resolve">
   <property name="ivy.local.default.root" value="/opt/ivy/repository/local"/>
   <ivy:resolve />
</target>

其他属性如常春藤图案和工件图案也可以自定义如下 -

构建.xml

<target name="resolve">
   <property name="ivy.local.default.root" value="/opt/ivy/repository/local"/>
   <property name="ivy.local.default.ivy.pattern" value="[module]/[revision]/ivy.xml"/>
   <property name="ivy.local.default.artifact.pattern" value="[module]/[revision]/[artifact].[ext]"/>
   <ivy:resolve />
</target>

覆盖ivysettings默认值

默认情况下,ivy 的配置位于 ivy.jar 中的 ivysettings.xml 中。

ivy设置.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-local.xml 的内容。

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>

Apache IVY - 共享存储库

共享存储库是团队的团队级共享存储库。在组织中被覆盖是很常见的。

默认位置

默认情况下,共享存储库位于 ${ivy.default.ivy.user.dir}/shared 文件夹中。如果要更改它,请使用 ant 文件中的 ivy.shared.default.root 变量。

构建.xml

<target name="resolve">
   <property name="ivy.shared.default.root" value="/opt/ivy/repository/shared"/>
   <ivy:resolve />
</target>

其他属性如常春藤图案和工件图案也可以自定义如下 -

构建.xml

<target name="resolve">
   <property name="ivy.shared.default.root" value="/opt/ivy/repository/shared"/>
   <property name="ivy.shared.default.ivy.pattern" value="[organisation]/[module]/[revision]/ivy.xml"/>
   <property name="ivy.shared.default.artifact.pattern" value="[organisation]/[module]/[revision]/[artifact].[ext]"/>
   <ivy:resolve />
</target>

覆盖ivysettings默认值

默认情况下,ivy 的配置位于 ivy.jar 中的 ivysettings.xml 中。

ivy设置.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-shared.xml 的内容。

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>

Apache IVY - 公共存储库

公共存储库是可使用互联网访问并具有第三方模块的存储库。默认情况下,m2 兼容模式下的 ibiblio 是公共存储库。它也称为 Maven 2 公共存储库。

覆盖ivysettings默认值

默认情况下,ivy 的配置位于 ivy.jar 中的 ivysettings.xml 中。

ivy设置.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.xml。

ivy设置.xml

<ivysettings>
   <settings defaultResolver="default"/>
   <include url="http://customserver/ivy/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>

更新默认的ivysetting-public.xml内容。

原始-ivysetting-public.xml

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

更新 - ivysetting-public.xml

<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>