Apache Ivy 简明教程
Apache IVY - Overview
Apache Ivy 是一款非常流行也非常强大的依赖项管理工具,用于以与 Apache Maven 管理依赖项相同的方式,在基于 ANT 的项目中管理依赖项。
Apache Ivy 基于 Apache ANT,遵循相同的设计原则,是 Apache ANT 的一个子项目,并由 Apache ANT 社区积极管理和支持。
Features
以下是 Apache Ivy 的重要功能。
-
ANT Based − Apache Ivy 为基于 ANT 的项目提供了依赖项管理功能。它也十分易于使用。
-
Dependency Reports − Apache Ivy 提供了以 HTML 及报告格式打印依赖项图表的选项。
-
Non-intrusive − Apache Ivy 作为分发的一部分时,不会施加任何限制。即使是构建文件也不会依赖于 Apache Ivy。
-
Highly Flexible − Apache Ivy 提供了许多默认配置,并且可以非常轻松地根据需求进行配置。
-
Extendible − Apache Ivy 能够轻松扩展。你可以定义你自己的存储库、冲突解析器和最新策略。
-
Performance − Apache Ivy 基于性能构建。它保留了已下载程序库的缓存。先查看本地存储库以解决依赖项,再查看其他存储库。
-
Transitive Dependencies − 如果一个项目或库依赖于可能需要另一个库的其他库,则 Apache Ivy 会自动管理传递依赖项。
-
Maven Repository − Apache Ivy 遵循类似于 Maven 存储库约定。Apache Ivy 可以使用 maven 全局存储库来解决依赖项。
-
Maven 2 POMs - Apache Ivy 可以将 Maven 2 POM 读作模块描述符,可以将 ivy 设置为模块描述符。因此,它可以轻松地将现有项目迁移到 IVY 管理项目。
-
Publishing - Apache Ivy 提供支持以发布您的项目并简化多项目环境部署过程。
-
Free to Use - Apache Ivy 是开源的,可以免费使用。
-
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 。
-
确保将 JAVA_HOME 环境变量设置为 JDK 安装所在的文件夹。
-
从 https://ant.apache.org 下载二进制文件。
-
使用 Winzip、winRAR、7-zip 或类似工具将 ZIP 文件解压到方便的位置 c:\ 文件夹。
-
创建一个新的环境变量,称为 ANT_HOME ,指向 Ant 安装文件夹,在本例中为 c:\apache-ant-1.10.12-bin 文件夹。
-
将路径附加到 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
-
从 https://ant.apache.org/ivy 下载二进制文件
-
使用 Winzip、winRAR、7-zip 或类似工具将 ZIP 文件解压到方便的位置 c:\ 文件夹。
-
将 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 −
-
从 www.eclipse.org 下载最新的 Eclipse 二进制文件
-
将 Eclipse 二进制文件解压到方便的位置,例如 c:\ 文件夹
-
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 生态系统中重要的术语。
-
Organisation − 如其名称所示,它指创建项目或库的公司、个人开发者或团队名称。例如,com.tutorialspoint。
-
Module − 如其名称所示,它指可重用的单元或模块。一个模块通常有一个附加到其上的版本。例如 commons-lang 或 ivy-test 等。
-
Module Descriptor − 模块描述符指描述模块的 ivy.xml 文件。一个模块描述符包含标识符(组织、名称、分支和版本)、已发布工件、配置和依赖项。
-
Artifact − 工件是指作为可交付成果的单个文件。例如 jar 文件。工件的类型可以是:zip、gz 等。一个模块的 jar、源 jar、Javadoc jar 是不同的工件。
-
Type - 类型标识工件类别,如 jar、war、src、doc 等。
-
Artifact file name extension − 工件扩展,如 .jar、,zip、.gz 等。
-
Module Revision − 模块的唯一修订号或版本号。
-
Status of Revision - 修订版的状态指示修订版的稳定性。以下是最重要的状态值:- integration - 表示持续开发、夜间构建等。 milestone - 表示尚未完成的分发。 release - 表示已测试和完成的主要版本。
-
Repository − 类似于 Maven 存储库,存储库表示 ivy 可以搜索库、工件、模块等的分发站点。存储库可以是公共的、私有的或共享的。
-
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 设置文件的重要标签。
-
property − 设置 ivy 变量。基数:0..n
-
properties − 使用属性文件设置 ivy 变量。基数:0..n
-
settings − 使用默认值配置 ivy。基数:0..1
-
include − 包含其他设置文件。基数:0..n
-
classpath − 向类路径中添加一个用于加载插件的位置。基数:0..n
-
typedef − 在 ivy 中定义新类型。基数:0..n
-
lock-strategies − 定义锁定策略。基数:0..1
-
caches − 定义存储库高速缓存管理器。基数:0..1
-
latest-strategies − 定义最新策略。基数:0..1
-
parsers − 定义模块描述符解析器。基数:0..1
-
version-matchers − 定义新版本匹配器。基数:0..1
-
triggers − 在 ivy 事件上注册触发器。基数:0..1
-
namespaces − 用于定义新的命名空间。基数:0..1
-
macrodef − 用于定义新的宏解析器。基数:0..n
-
resolvers − 用于定义依赖项解析器。基数:0..1
-
conflict-managers − 用于定义冲突管理器。基数:0..1
-
modules − 用于定义模块和依赖项解析器之间的规则。基数:0..1
-
outputters − 用于定义可用报告输出器的列表。基数:0..1
-
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/* ,然后按回车键。它会显示以下插件。
单击下一步,你将看到以下屏幕。
如果你在安装插件时遇到任何错误,只需重启进程。成功安装后,你将在 eclipe 中看到插件。
现在你可以使用 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>
以下是重要术语。
-
ivy-module − 根元素,用于识别 ivy 版本、命名空间等。
-
info − 元素,用于识别项目作为唯一实体。 organisation − 组织名称 module − 模块名称 status − 状态,例如发布、集成或里程碑。
-
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<
以下是重要术语。
-
project − 根元素,用于识别项目名称、ivy 的默认任务命名空间等。
-
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>
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>
以下是重要术语。
-
organisation − 组织名称。
-
module − 项目的模块名称。
-
revision − 项目版本。
-
from − 来自存储库类型。
-
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>
以下是重要术语。
-
sync − 同步真确保 lib 目录最新且已删除任何额外文件。
-
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>
以下是重要术语。
-
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>
以下是重要术语。
-
resolver − 用于发布的 resolver。
-
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 提供了两种类型的解析器。
-
Composite − 一个使用其他解析器执行其任务的解析器。
-
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>