Apache Ivy 简明教程

Apache IVY - Quick Guide

Apache IVY - Overview

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

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

Features

以下是 Apache Ivy 的重要功能。

  1. ANT Based − Apache Ivy 为基于 ANT 的项目提供了依赖项管理功能。它也十分易于使用。

  2. Dependency Reports − Apache Ivy 提供了以 HTML 及报告格式打印依赖项图表的选项。

  3. Non-intrusive − Apache Ivy 作为分发的一部分时,不会施加任何限制。即使是构建文件也不会依赖于 Apache Ivy。

  4. Highly Flexible − Apache Ivy 提供了许多默认配置,并且可以非常轻松地根据需求进行配置。

  5. Extendible − Apache Ivy 能够轻松扩展。你可以定义你自己的存储库、冲突解析器和最新策略。

  6. Performance − Apache Ivy 基于性能构建。它保留了已下载程序库的缓存。先查看本地存储库以解决依赖项,再查看其他存储库。

  7. Transitive Dependencies − 如果一个项目或库依赖于可能需要另一个库的其他库,则 Apache Ivy 会自动管理传递依赖项。

  8. Maven Repository − Apache Ivy 遵循类似于 Maven 存储库约定。Apache Ivy 可以使用 maven 全局存储库来解决依赖项。

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

  10. Publishing - Apache Ivy 提供支持以发布您的项目并简化多项目环境部署过程。

  11. Free to Use - Apache Ivy 是开源的,可以免费使用。

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

Apache IVY - Environment Setup

Apache Ivy 对你的电脑只要求安装了 Java 和 ANT。

Apache Ant 是在已通过开放源代码计划认证的全面开源许可证“Apache 软件许可证”之下分发的。

可在以下位置找到包含其全部源代码、类文件和文档的最新 Apache Ant 版本: http://ant.apache.org.

Installing Apache Ant

假设您已在计算机上下载并安装了 Java 开发工具包 (JDK)。如果没有,请按照说明操作 here

  1. 确保将 JAVA_HOME 环境变量设置为 JDK 安装所在的文件夹。

  2. https://ant.apache.org 下载二进制文件。

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

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

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

Verifying Apache Ant Installation

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

您应该看到类似于 − 的输出

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

如果您没有看到以上输出结果,请验证您是否已经正确地按照安装步骤操作。

Installing Apache Ivy

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

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

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

Verifying Apache Ivy Installation

要在计算机上验证 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

Installing Eclipse

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

要安装 Eclipse −

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

  2. 将 Eclipse 二进制文件解压到方便的位置,例如 c:\ 文件夹

  3. Run Eclipse from c:\eclipse\eclipse.exe

Apache IVY - Terminology

考虑以下示例 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 Terms

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

  1. Organisation − 如其名称所示,它指创建项目或库的公司、个人开发者或团队名称。例如,com.tutorialspoint。

  2. Module − 如其名称所示,它指可重用的单元或模块。一个模块通常有一个附加到其上的版本。例如 commons-lang 或 ivy-test 等。

  3. Module Descriptor − 模块描述符指描述模块的 ivy.xml 文件。一个模块描述符包含标识符(组织、名称、分支和版本)、已发布工件、配置和依赖项。

  4. Artifact − 工件是指作为可交付成果的单个文件。例如 jar 文件。工件的类型可以是:zip、gz 等。一个模块的 jar、源 jar、Javadoc jar 是不同的工件。

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

  6. Artifact file name extension − 工件扩展,如 .jar、,zip、.gz 等。

  7. Module Revision − 模块的唯一修订号或版本号。

  8. Status of Revision - 修订版的状态指示修订版的稳定性。以下是最重要的状态值:- integration - 表示持续开发、夜间构建等。 milestone - 表示尚未完成的分发。 release - 表示已测试和完成的主要版本。

  9. Repository − 类似于 Maven 存储库,存储库表示 ivy 可以搜索库、工件、模块等的分发站点。存储库可以是公共的、私有的或共享的。

  10. Ivy Settings − Apache Ivy 遵循 Maven 原理,并带有许多默认配置。可以通过定义 ivysettings.xml 文件来覆盖默认设置。

Apache IVY - Settings File

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>

Tags of Ivy Settings File

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

  1. property − 设置 ivy 变量。基数:0..n

  2. properties − 使用属性文件设置 ivy 变量。基数:0..n

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

  4. include − 包含其他设置文件。基数:0..n

  5. classpath − 向类路径中添加一个用于加载插件的位置。基数:0..n

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

  7. lock-strategies − 定义锁定策略。基数:0..1

  8. caches − 定义存储库高速缓存管理器。基数:0..1

  9. latest-strategies − 定义最新策略。基数:0..1

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

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

  12. triggers − 在 ivy 事件上注册触发器。基数:0..1

  13. namespaces − 用于定义新的命名空间。基数:0..1

  14. macrodef − 用于定义新的宏解析器。基数:0..n

  15. resolvers − 用于定义依赖项解析器。基数:0..1

  16. conflict-managers − 用于定义冲突管理器。基数:0..1

  17. modules − 用于定义模块和依赖项解析器之间的规则。基数:0..1

  18. outputters − 用于定义可用报告输出器的列表。基数:0..1

  19. statuses − 用于定义可用状态的列表。基数:0..1

Apache IVY - Eclipse Ivy Plugin

IvyDE 是 Apache 提供的 Eclipse 插件。要安装 IvyDE,请启动 Eclipse 并导航至帮助 > 安装新软件。它会显示可用软件窗口。输入 IvyDE 更新站点 * [role="bare"] [role="bare"]http://www.apache.org/dist/ant/ivyde/updatesite/* ,然后按回车键。它会显示以下插件。

available software

单击下一步,你将看到以下屏幕。

installation

如果你在安装插件时遇到任何错误,只需重启进程。成功安装后,你将在 eclipe 中看到插件。

ivy plugin

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

Apache IVY - Resolve Task

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

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

Application.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。

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

以下是重要术语。

  1. ivy-module − 根元素,用于识别 ivy 版本、命名空间等。

  2. info − 元素,用于识别项目作为唯一实体。 organisation − 组织名称 module − 模块名称 status − 状态,例如发布、集成或里程碑。

  3. dependencies − 元素,用于包含项目依赖项作为具有以下属性的 dependency 标签。 org − 依赖项组织的名称 name − 依赖项的名称。 rev − 依赖项的版本。

build.xml

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

以下是重要术语。

  1. project − 根元素,用于识别项目名称、ivy 的默认任务命名空间等。

  2. target − 用于创建新任务并描述其内容的目标元素。它包含一个 Ivy 分解任务。当 ant 构建项目时,它会运行 Ivy 分解任务,后者再使用 Ivy 分解依赖项。

Building the project

因为我们已准备好所有文件。只需转到控制台。导航至 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>

Resolve Output

以下是重要术语。

  1. conf − 配置,在我们的案例中,我们使用默认配置。

  2. modules − 表明模块、已下载模块等的总数目。

  3. artifacts − 表明了工件、已下载工件等的总数量。

你可以在 * ${ivy.default.ivy.user.dir} > .ivy2 > cache* 文件夹中的 Ivy 缓存默认位置验证下载的文件。而 ${ivy.default.ivy.user.dir} 默认为用户主页:$HOME。

Apache IVY - Install Task

安装任务用于在解析器中安装模块及其依赖项。当要下载公共构建产出并在私有存储库中使用时,将用到该模块。默认情况下,用户本地存储库就是其私有存储库,位于 ${ivy.default.ivy.user.dir}/local。

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

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

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

以下是重要术语。

  1. organisation − 组织名称。

  2. module − 项目的模块名称。

  3. revision − 项目版本。

  4. from − 来自存储库类型。

  5. to − 到存储库类型。

Building the project

因为我们已准备好所有文件。只需转到控制台。导航至 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 - Retrieve Task

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

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

更新 build.xml, 以使用 ivy retrieve 任务。

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

以下是重要术语。

  1. sync − 同步真确保 lib 目录最新且已删除任何额外文件。

  2. type − 类型指示常春藤仅复制指定类型的工件,如 jar。源 jar,javadoc jar 将被忽略。源 jar 的类型为 src 或 source,javadoc jar 的类型为 doc 或 bundle。

在项目 lib 目录中,retrieve 任务默认情况下复制已解析依赖项,且可以通过 pattern 属性更改。

Building the project

因为我们已准备好所有文件。只需转到控制台。导航至 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 Task

用作创建 ANT 类路径的 cachepath 任务,该类路径包含高速缓存中存在的已解析工件。由于 ANT 需要将 jar 设置为编译 Java 文件的类路径,因此 Ivy cachepath 将构建类路径。

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

更新 build.xml, 以使用 ivy retrieve 任务。

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

以下是重要术语。

  1. pathid − 存在缓存工件的类路径 id。

在项目 lib 目录中,retrieve 任务默认情况下复制已解析依赖项,且可以通过 pattern 属性更改。

Building the project

因为我们已准备好所有文件。只需转到控制台。导航至 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 - Publish Task

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

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

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

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

以下是重要术语。

  1. resolver − 用于发布的 resolver。

  2. pattern − 用于定位制品的花样。

此处发布任务首先构建 jar,然后解析依赖关系,设置信息,再将制品发布至本地存储库。

Building the project

因为我们已准备好所有文件。只需转到控制台。导航至 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 Task

info 任务用于在文件中设置 ivy 专有信息,且无需进行任何依赖项解析就可使用。

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

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

build.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 任务设置信息,然后将工件发布到本地仓库。

Building the project

因为我们已准备好所有文件。只需转到控制台。导航至 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

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

build.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 - Resolvers

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

  1. Composite − 一个使用其他解析器执行其任务的解析器。

  2. Standard − 一个执行所需任务的解析器。

Standard Resolvers

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

Sr.No.

Name (Type) & Description

1

IvyRep (Standard) 定位 ivyrep 上的 Ivy 文件和 ibiblio 上的制品。

2

IBiblio (Standard) 定位 ibiblio 上的制品。

3

BinTray (Standard) 在 bintray 中定位工件。

4

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

5

FileSystem (Standard) 在本地文件系统上定位 Ivy 文件和工件。

6

URL (Standard) 在可通过 URL 访问的存储库上定位 Ivy 文件和工件。

7

MirroredURL (Standard) 在可通过镜像列表中的 URL 访问的存储库上定位 Ivy 文件和工件。

8

VFS (Standard) 在可通过 Apache Commons VFS 访问的存储库上定位 Ivy 文件和工件。

9

SSH (Standard) 在可通过 SSH 访问的存储库上定位 Ivy 文件和工件。

10

SFTP (Standard) 在可通过 SFTP 访问的存储库上定位 Ivy 文件和工件。

11

Jar (Standard) 在 jar 内的存储库上定位 Ivy 文件和工件。

12

Chain (Composite) 将搜索委托给一个子解析器链。

13

Dual (Composite) 将搜索委托给一个解析器,将工件委托给另一个解析器。

14

OBR (Standard) 将模块作为 OSGi obr.xml 列出的 OSGi bundle 解析。

15

Eclipse updatesite (Standard) 将模块作为托管在 Eclipse 更新站点上的 OSGi bundle 解析。

16

OSGi-agg (Composite) 将搜索委托给支持 OSGi bundle 的一个子解析器链。

让我们在 E: > ivy2 文件夹如下所描述类似的新项目中创建 Tester.java、build.xml 和 ivy.xml。在 E: > ivy2 下创建一个 settings 文件夹。在 settings 文件夹中创建 ivysettings.xml。

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

ivy.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 - Publish Task 章节中发布的测试。

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

在这里,我们添加了使用 chain resolver 创建的一个复合解析器,它有两个解析器,一个名为 library,用于在本地存储库中定位库,一个名为 ibiblio,用于在 maven 公共存储库中定位库。

Building the project

当我们准备好了所有文件。只需进入控制台。导航到 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 - Local Repository

本地存储库是用户的私有存储库。如果用户正在使用版本已在其他地方更改且存在重大更改的库,则非常有用。如果使用本地存储库,ivy 将在找到情况下使用本地中存在的库,并且不会查看公有或共享存储库。

Default Location

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

build.xml

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

ivy 花样和制品花样等其他属性还可按如下方式定制:

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

Overriding ivysettings defaults

默认情况下,ivy 在 ivy.jar 中存在的 ivysettings.xml 中具有自己的配置。

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

共享存储库是团队的团队级别共享存储库。通常会被组织覆盖。

Default Location

默认情况下,共享存储库位于 ${ivy.default.ivy.user.dir}/shared 文件夹中。如果你想进行更改,可在 ant 文件中使用 ivy.shared.default.root 变量。

build.xml

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

ivy 花样和制品花样等其他属性还可按如下方式定制:

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

Overriding ivysettings defaults

默认情况下,ivy 在 ivy.jar 中存在的 ivysettings.xml 中具有自己的配置。

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

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

Overriding ivysettings defaults

默认情况下,ivy 在 ivy.jar 中存在的 ivysettings.xml 中具有自己的配置。

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.xml。

ivysettings.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 内容。

Original - ivysetting-public.xml

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

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