`

ivy教程(8)-使用ivy模块配置

阅读更多

这个教程介绍ivy文件中的模块配置的使用。ivy模块配置事实上是一个非常重要的概念。某些人甚至告诉我使用ivy而不用ivy配置就像吃乳酪而不动就在你旁边的Chateau Margaux 1976!

    严肃的说,ivy中的配置可以更好的理解为你的模块的视图,你将可以看到在这里他们将如何被高效地使用。

    关于配置的参考文件可以在这里这里 找到。

    1) Introduction

    源文件在这里 src/example/configurations/multi-projects.
    我们有两个项目:

- filter-framework 是一个类库,定义一个api来过滤字符串数组,这个api有两个实现.
- myapp 是一个使用filter-framework的非常小的应用.

    这个类库产生3个制品:
- api的jar
- 一个没有外部依赖的实现的jar
- 另一个需要commons-collections来执行的实现jar

    应用仅仅需要api来编译,在运行时可以使用两个实现中的任意一个。

    2) 类库项目

    在这个教程中我们定义的第一个项目是filter-framework.
    为了得到一个良好处理的制品发布定义,我们定义配置来计划让其他人使用我们的类库的使用方式。

    1. ivy.xml 文件

< ivy-module  version ="1.0" >
    
< info  organisation ="org.apache"  module ="filter-framework" />
    
< configurations >
        
< conf  name ="api"   description ="only provide filter framework API" />
        
< conf  name ="homemade-impl"  extends ="api"  description ="provide a home made implementation of our api" />
        
< conf  name ="cc-impl"  extends ="api"  description ="provide an implementation that use apache common collection

framework"
/>
        
< conf  name ="test"  extends ="cc-impl"  visibility ="private"  description ="for testing our framework" />
    
</ configurations >
    
< publications >
        
< artifact  name ="filter-api"  type ="jar"   conf ="api"  ext ="jar" />
        
< artifact  name ="filter-hmimpl"  type ="jar"   conf ="homemade-impl"  ext ="jar" />
        
< artifact  name ="filter-ccimpl"  type ="jar"   conf ="cc-impl"  ext ="jar" />        
    
</ publications >
    
< dependencies >
        
< dependency  org ="commons-collections"  name ="commons-collections"  rev ="3.1"  conf ="cc-impl->default" />
        
< dependency  org ="junit"  name ="junit"  rev ="3.8"  conf ="test->default" />
    
</ dependencies >
</ ivy-module >


    2. 解释

    如你所见,我们定义了3个公共配置和一个私有配置(为测试定义junit依赖)。
    2个实现配置homemade-impl, cc-impl 继承自api配置,因此在api中定义的制品在它的继承配置中同样是需要的。
    在publications标签中,我们定义了我们要产生的制品(在这里它们是jar)并给他们使用了配置。
    后面当其他模块要使用我们的类库时,他们将有非常灵活的方式来定义他们需要的东西。

    3. 在实战中检验
    The library project is build using ant. Open a shell in the root directory of the project and type ant.
    类库项目使用ant来构建。在项目的根目录下打开一个shell,并输入ant。

Buildfile: src\example\configurations\multi-projects\filter-framework\build.xml

clean:

resolve:
[ivy:retrieve] :: Ivy 2.0.0-beta1-local-20071105200109 - 20071105200109 :: http://ant.apache.org/ivy/ ::
[ivy:retrieve] No ivy:settings found for the default reference 'ivy.instance'.  A default instance will be used
[ivy:retrieve] no settings file found, using default...
[ivy:retrieve] :: loading settings :: url = jar:file:/c:/dev/data/opensource_workspace/ivy/build/artifact/ivy-

core.jar!/org/apache/ivy/core/settings/ivysettings.xml
[ivy:retrieve] :: resolving dependencies :: [ org.apache | filter-framework | working@BEN-ScokartG ]
[ivy:retrieve]     confs: [api, homemade-impl, cc-impl, test]
[ivy:retrieve]     found [ commons-collections | commons-collections | 3.1 ] in public
[ivy:retrieve]     found [ junit | junit | 3.8 ] in public
[ivy:retrieve] downloading http://repo1.maven.org/maven2/commons-collections/commons-collections/3.1/commons-collections-

3.1.jar ...
[ivy:retrieve] ....................................................................
[ivy:retrieve]
....................................................................
[ivy:retrieve]
...................................
[ivy:retrieve]
....................................................................
[ivy:retrieve]
................................... (546kB)
[ivy:retrieve] .. (0kB)
[ivy:retrieve]     [SUCCESSFUL ] [ commons-collections | commons-collections | 3.1 ]/commons-collections.jar[jar] (8322ms)
[ivy:retrieve] downloading http://repo1.maven.org/maven2/junit/junit/3.8/junit-3.8.jar ...
[ivy:retrieve]
....................................................................
[ivy:retrieve] ... (118kB)
[ivy:retrieve] .. (0kB)
[ivy:retrieve]     [SUCCESSFUL ] [ junit | junit | 3.8 ]/junit.jar[jar] (3015ms)
[ivy:retrieve] :: resolution report ::
    ---------------------------------------------------------------------
    |                  |            modules            ||   artifacts   |
    |       conf       | number| search|dwnlded|evicted|| number|dwnlded|
    ---------------------------------------------------------------------
    |        api       |   0   |   0   |   0   |   0   ||   0   |   0   |
    |   homemade-impl  |   0   |   0   |   0   |   0   ||   0   |   0   |
    |      cc-impl     |   1   |   1   |   0   |   0   ||   1   |   1   |
    |       test       |   2   |   2   |   0   |   0   ||   2   |   2   |
    ---------------------------------------------------------------------
[ivy:retrieve] :: retrieving :: [ org.apache | filter-framework ]
[ivy:retrieve]     confs: [api, homemade-impl, cc-impl, test]
[ivy:retrieve]     3 artifacts copied, 0 already retrieved

build:
    [mkdir] Created dir: C:\dev\data\opensource_workspace\ivy\src\example\configurations\multi-projects\filter-

framework\build
    [mkdir] Created dir: C:\dev\data\opensource_workspace\ivy\src\example\configurations\multi-projects\filter-

framework\distrib
    [javac] Compiling 4 source files to C:\dev\data\opensource_workspace\ivy\src\example\configurations\multi-

projects\filter-framework\build
    [javac] Note: Some input files use unchecked or unsafe operations.
    [javac] Note: Recompile with -Xlint:unchecked for details.
      [jar] Building jar: C:\dev\data\opensource_workspace\ivy\src\example\configurations\multi-projects\filter-

framework\distrib\filter-api.jar
      [jar] Building jar: C:\dev\data\opensource_workspace\ivy\src\example\configurations\multi-projects\filter-

framework\distrib\filter-hmimpl.jar
      [jar] Building jar: C:\dev\data\opensource_workspace\ivy\src\example\configurations\multi-projects\filter-

framework\distrib\filter-ccimpl.jar

test:
    [mkdir] Created dir: C:\dev\data\opensource_workspace\ivy\src\example\configurations\multi-projects\filter-

framework\build\test-report
    [mkdir] Created dir: C:\dev\data\opensource_workspace\ivy\src\example\configurations\multi-projects\filter-

framework\build\test-classes
    [javac] Compiling 3 source files to C:\dev\data\opensource_workspace\ivy\src\example\configurations\multi-

projects\filter-framework\build\test-classes
    [junit] Running filter.ccimpl.CCFilterTest
    [junit] Tests run: 5, Failures: 0, Errors: 0, Time elapsed: 0.02 sec
    [junit] Running filter.hmimpl.HMFilterTest
    [junit] Tests run: 5, Failures: 0, Errors: 0, Time elapsed: 0 sec

publish:
[ivy:publish] :: delivering :: [ org.apache | filter-framework | working@BEN-ScokartG ] :: 1.3 :: release :: Mon Nov 05

21:10:46 CET 2007
[ivy:publish]     delivering ivy file to C:\dev\data\opensource_workspace\ivy\src\example\configurations\multi-

projects\filter-framework\distrib/ivy.xml
[ivy:publish] :: publishing :: [ org.apache | filter-framework ]
[ivy:publish]     published filter-hmimpl to C:\Documents and Settings\scokartg\.ivy2\local/org.apache/filter-

framework/1.3/jars/filter-hmimpl.jar
[ivy:publish]     published filter-api to C:\Documents and Settings\scokartg\.ivy2\local/org.apache/filter-

framework/1.3/jars/filter-api.jar
[ivy:publish]     published filter-ccimpl to C:\Documents and Settings\scokartg\.ivy2\local/org.apache/filter-

framework/1.3/jars/filter-ccimpl.jar
[ivy:publish]     published ivy to C:\Documents and Settings\scokartg\.ivy2\local/org.apache/filter-

framework/1.3/ivys/ivy.xml
     [echo] project filter-framework released with version 1.3

BUILD SUCCESSFUL
Total time: 20 seconds


    ant的默认target是publish。
    这个target使用ivy发布我们的类库到本地仓库。
    因为我们没有指定任何仓库路径,因此使用默认仓库。({home.dir}/.ivy2/local/org.apache/filter-framework/)现在我们准备好了使用我们的类库。

    3) 应用项目

    现在我们已经完成了我们美妙的类库,我们想用它!
    这个教程带来一个名为myapp的示例应用。
 
    1. ivy.xml文件

< ivy-module  version ="1.0" >
    
< info  organisation ="org.apache"  module ="myapp" />
   
    
< configurations >
           
< conf  name ="build"  visibility ="private"  description ="compilation only need api jar"   />
        
< conf  name ="noexternaljar"  description ="use only company jar"   />
        
< conf  name ="withexternaljar"  description ="use company jar and third party jars"   />    
    
</ configurations >
   
    
< dependencies >
        
< dependency  org ="org.apache"  name ="filter-framework"  rev ="latest.integration"  conf ="build->api; noexternaljar-

>homemade-impl; withexternaljar->cc-impl"
/>
    
</ dependencies >
</ ivy-module >


    2. 解释

    我们创建了3个配置来定义我们想使用应用的方式。
    build配置定义了编译时的依赖,而这个只需要来自filter-framework的api conf。
    其他配置定义了运行时依赖。一个将仅仅使用"home-made"的jars,而另一个将使用外部的jars。

    我们同样定义了对于上面类库的依赖。
    在依赖中我们使用配置映射来匹配我们和类库的配置。
    你可以在这里 找到更多的关于配置映射的信息。

   1. build->api : 这里我们告诉ivy,我们的build配置依赖于依赖的api配置。
   2. noexternaljar->homemade-impl : 这里我们告诉ivy,我们的noexternaljar 配置依赖于依赖的homemade-impl配置。
   3. withexternaljar->cc-impl : 这里我们告诉ivy,我们的的withexternaljar 配置依赖于依赖的cc-impl配置。

    注意我们从不定义在每个配置中需要的任何依赖制品:依赖模块文件将定义发布的制品和将被哪个配置使用。

    在ant的build.xm文件中我们定义解析的target如下:

< target  name ="resolve"  description ="--> retreive dependencies with ivy" >
    
< ivy:retrieve  pattern ="${ivy.lib.dir}/[conf]/[artifact].[ext]" />
</ target >


    当我们调用这个target时,ivy将使用我们的在root文件夹中的ivy.xml来做解析并随后获取所有的制品。制品被获取并分别保存在和他们所属的配置对应目录下。在调用这个target后你的lib目录将看起来像这样:

Repertoire de D:\ivy\src\example\configurations\multi-projects\myapp\lib

01/24/2006  11:19 AM              build
01/24/2006  11:19 AM              noexternaljar
01/24/2006  11:19 AM              withexternaljar
               0 fichier(s)                0 octets

 Repertoire de D:\ivy\src\example\configurations\multi-projects\myapp\lib\build

01/24/2006  10:53 AM             1,174 filter-api.jar
               1 fichier(s)            1,174 octets

 Repertoire de D:\ivy\src\example\configurations\multi-projects\myapp\lib\noexternaljar

01/24/2006  10:53 AM             1,174 filter-api.jar
01/24/2006  10:53 AM             1,030 filter-hmimpl.jar
               2 fichier(s)            2,204 octets

 Repertoire de D:\ivy\src\example\configurations\multi-projects\myapp\lib\withexternaljar
01/24/2006  10:53 AM           559,366 commons-collections.jar
01/24/2006  10:53 AM             1,174 filter-api.jar
01/24/2006  10:53 AM             1,626 filter-ccimpl.jar
               3 fichier(s)          562,166 octets


    如你所见对于每个配置我们现在都有了一个jar的集合。

    让我们试试启动我们的app。

    3. 在实战中检验

    使用ant来运行应用。
    默认ant target是run-cc,将使用apache commons-collections实现来启动应用。

Buildfile: src\example\configurations\multi-projects\myapp\build.xml

resolve:
[ivy:retrieve] :: Ivy 2.0.0-beta1-local-20071104204849 - 20071104204849 :: http://ant.apache.org/ivy/ ::
[ivy:retrieve] No ivy:settings found for the default reference 'ivy.instance'.  A default instance will be used
[ivy:retrieve] no settings file found, using default...
[ivy:retrieve] :: loading settings :: url = jar:file:/c:/dev/data/opensource_workspace/ivy/build/artifact/ivy-

core.jar!/org/apache/ivy/core/settings/ivysettings.xml
[ivy:retrieve] :: resolving dependencies :: [ org.apache | myapp | working@BEN-ScokartG ]
[ivy:retrieve]     confs: [build, noexternaljar, withexternaljar]
[ivy:retrieve]     found [ org.apache | filter-framework | 1.3 ] in local
[ivy:retrieve]     [1.3] [ org.apache | filter-framework | latest.integration ]
[ivy:retrieve]     found [ commons-collections | commons-collections | 3.1 ] in public
[ivy:retrieve] downloading C:\Documents and Settings\scokartg\.ivy2\local\org.apache\filter-framework\1.3\jars\filter-

api.jar
...
[ivy:retrieve] .. (1kB)
[ivy:retrieve] .. (0kB)
[ivy:retrieve]     [SUCCESSFUL ] [ org.apache | filter-framework | 1.3 ]/filter-api.jar[jar] (40ms)
[ivy:retrieve] downloading C:\Documents and Settings\scokartg\.ivy2\local\org.apache\filter-framework\1.3\jars\filter-

hmimpl.jar
...
[ivy:retrieve] .. (1kB)
[ivy:retrieve] .. (0kB)
[ivy:retrieve]     [SUCCESSFUL ] [ org.apache | filter-framework | 1.3 ]/filter-hmimpl.jar[jar] (20ms)
[ivy:retrieve] downloading C:\Documents and Settings\scokartg\.ivy2\local\org.apache\filter-framework\1.3\jars\filter-

ccimpl.jar
...
[ivy:retrieve] .. (1kB)
[ivy:retrieve] .. (0kB)
[ivy:retrieve]     [SUCCESSFUL ] [ org.apache | filter-framework | 1.3 ]/filter-ccimpl.jar[jar] (80ms)
[ivy:retrieve] :: resolution report ::
    ---------------------------------------------------------------------
    |                  |            modules            ||   artifacts   |
    |       conf       | number| search|dwnlded|evicted|| number|dwnlded|
    ---------------------------------------------------------------------
    |       build      |   1   |   1   |   0   |   0   ||   1   |   1   |
    |   noexternaljar  |   1   |   1   |   0   |   0   ||   2   |   2   |
    |  withexternaljar |   2   |   1   |   0   |   0   ||   3   |   2   |
    ---------------------------------------------------------------------
[ivy:retrieve] :: retrieving :: [ org.apache | myapp ]
[ivy:retrieve]     confs: [build, noexternaljar, withexternaljar]
[ivy:retrieve]     6 artifacts copied, 0 already retrieved

build:
    [mkdir] Created dir: C:\dev\data\opensource_workspace\ivy\src\example\configurations\multi-projects\myapp\build
    [javac] Compiling 1 source file to C:\dev\data\opensource_workspace\ivy\src\example\configurations\multi-

projects\myapp\build

run-cc:
     [java] Filtering with:class filter.ccimpl.CCFilter
     [java] Result :[two, tree]

BUILD SUCCESSFUL
Total time: 4 seconds


    仅使用自制jars来启动应用时很直接的。
    键入ant run-hm。

Buildfile: src\example\configurations\multi-projects\myapp\build.xml

resolve:
[ivy:retrieve] :: Ivy 2.0.0-beta1-local-20071104204849 - 20071104204849 :: http://ant.apache.org/ivy/ ::
[ivy:retrieve] No ivy:settings found for the default reference 'ivy.instance'.  A default instance will be used
[ivy:retrieve] no settings file found, using default...
[ivy:retrieve] :: loading settings :: url = jar:file:/c:/dev/data/opensource_workspace/ivy/build/artifact/ivy-

core.jar!/org/apache/ivy/core/settings/ivysettings.xml
[ivy:retrieve] :: resolving dependencies :: [ org.apache | myapp | working@BEN-ScokartG ]
[ivy:retrieve]     confs: [build, noexternaljar, withexternaljar]
[ivy:retrieve]     found [ org.apache | filter-framework | 1.3 ] in local
[ivy:retrieve]     [1.3] [ org.apache | filter-framework | latest.integration ]
[ivy:retrieve]     found [ commons-collections | commons-collections | 3.1 ] in public
[ivy:retrieve] :: resolution report ::
    ---------------------------------------------------------------------
    |                  |            modules            ||   artifacts   |
    |       conf       | number| search|dwnlded|evicted|| number|dwnlded|
    ---------------------------------------------------------------------
    |       build      |   1   |   1   |   0   |   0   ||   1   |   0   |
    |   noexternaljar  |   1   |   1   |   0   |   0   ||   2   |   0   |
    |  withexternaljar |   2   |   1   |   0   |   0   ||   3   |   0   |
    ---------------------------------------------------------------------
[ivy:retrieve] :: retrieving :: [ org.apache | myapp ]
[ivy:retrieve]     confs: [build, noexternaljar, withexternaljar]
[ivy:retrieve]     0 artifacts copied, 6 already retrieved

build:

run-hm:
     [java] Filtering with:class filter.hmimpl.HMFilter
     [java] Result :[two, tree]

BUILD SUCCESSFUL
Total time: 3 seconds


    很好,我们得到了同样的结果,但是我们可以看到实现的类是不一样的。

    4) 结论
    你应该尽可能多的使用配置。
    配置是ivy中非常重要的概念。他们容许你按照意愿来分组制品。
    当你书写假定要被重用的项目的ivy文件时,使用配置来容许人们只获取他们需要的东西,而不需要通过在依赖块中使用制品标签来手工指定。

0
1
分享到:
评论

相关推荐

    apache-ivy-2.3.0-bin.zip

    4. **src**:如果包含源码,这个目录下会有Ivy的所有源代码文件,按照模块结构划分。 5. **conf**:可能包含默认的Ivy配置文件,如`ivysettings.xml`,这是配置Ivy行为和仓库位置的地方。 6. **examples**:可能有...

    PyPI 官网下载 | ivy-demo-utils-1.1.2.tar.gz

    因此,Ivy-Demo-Utils可能包含了与ZooKeeper集成的模块,帮助开发者处理分布式环境中的问题。 "分布式"和"云原生"则进一步指明了该库的应用场景。分布式系统是指由多台计算机通过网络连接,共同完成一项任务的系统...

    apache-ivy-2-5-0.rar

    在Ivy的配置文件(通常是ivy.xml)中,你可以定义模块、依赖、发布信息等。 Ivy支持多种协议和仓库,包括HTTP、FTP、文件系统以及像Maven中央仓库这样的公共资源库。这样,无论依赖位于何处,Ivy都能有效地找到并...

    apache-ivy-2.0.0-beta1-src.zip

    7. **示例**:如果有的话,可能会有一些示例目录,包含如何使用Ivy进行项目配置和依赖管理的实际例子。 Ivy 的核心概念包括: - **依赖描述符**:`ivy.xml` 文件,定义了项目及其依赖关系。 - **仓库**:Ivy 可以...

    apache-ivy-2.3.0-rc2-bin.zip

    Ivy的工作原理是通过XML格式的配置文件(通常称为`ivy.xml`)来定义项目及其依赖。在这个文件中,你可以声明项目的信息,如组织、模块、版本,以及项目所需的其他模块或库。Ivy会根据这些信息,从指定的仓库(如...

    apache-ivy-2.3.0.rar

    8. **配置**:Ivy允许为每个依赖定义不同的配置,例如,你可以有一个仅包含运行时依赖的配置,另一个包含测试依赖的配置。 9. **插件支持**:Ivy可以通过插件扩展其功能,例如,可以使用插件来实现自定义的发布流程...

    apache-ivy-2.5.0-rc1-bin.zip

    5. **灵活的配置**:通过`.ivy.xml`文件可以定制依赖配置,包括排除特定模块、指定特定的依赖版本等。 6. **与其他构建工具集成**:除了与Ant紧密结合,Ivy也可以与Gradle、Maven等其他构建工具一起使用。 在实际...

    ivy-maven-plugin

    常春藤Maven插件 将 apache Ivy 依赖项添加到 Maven 项目的插件。 这是一个分支,它修复了对传递依赖的支持。 配置 ... baseVersion是要使用的常春藤配置,如果没有给出默认为“default” 该插件只

    ivy-erlang-complete:ivy-erlang-complete是erlang的上下文相关完成,无需连接到erlang节点

    使用ivy-erlang-complete需要先安装Emacs和Erlang环境,然后将解压后的`ivy-erlang-complete-master`目录添加到Emacs的load-path中。接着,在Emacs的配置文件(通常是`.emacs`或`.emacs.d/init.el`)中加载并启用...

    ivy-2.4.0.jar

    在IDEA中,如果项目使用Ant进行构建,且依赖管理部分依赖于Ivy,我们需要将Ivy库添加到IDEA的Ant配置中。具体步骤是将`ivy-2.4.0.jar`文件复制到IDEA的安装目录下的`lib/ant/lib`子目录。这样,IDEA的内置Ant版本就...

    ivy-jar-sample:常春藤解析器的示例 jar 存储库

    1. **Ivy配置文件**:通常命名为`ivy.xml`,它定义了项目的模块信息,包括模块的ID、版本、依赖关系以及每个依赖的范围(如编译、测试等)。 2. **Ant构建脚本**:由于Ivy与Apache Ant集成良好,所以常常会看到一个...

    apache-ivy-2.5.0-bin.tar.gz

    通过正确配置和使用Ivy,开发者可以更专注于编写代码,而不必过多地关心库的版本管理和下载。在2.5.0版本中,可能已经包含了对当时流行版本的Java和构建环境的良好支持,以及一些性能和稳定性的改进。

    apache-ivy-2.5.0-rc1-src.tar.gz

    Ivy使用一种名为“ivy.xml”的配置文件来声明项目及其依赖,这种文件格式与Ant的任务定义相融合,使得项目构建和依赖管理更加统一。 "apache-ivy-2.5.0-rc1-src.tar.gz"这个文件是Apache Ivy 2.5.0-rc1的源代码...

    apache-ivy-2.5.0-src.zip

    4. **配置**:在Ivy中,可以为每个模块定义不同的配置,每种配置代表了一组特定的依赖项,用于满足不同场景的需求。 5. **解析**:Ivy解析依赖树,确保所有直接和间接依赖都被正确地下载并放入构建路径。 6. **...

    apache-ivy

    6. **模块描述符**:`ivy.xml`是Ivy的模块描述符文件,它定义了模块的元数据,包括模块ID、版本、依赖关系、公开的库以及发布到仓库的配置。 7. **分辨率报告**:Ivy可以生成详细的依赖解析报告,列出所有解析出的...

    apache-ivy-2.4.0-bin-with-deps.zip

    Ant是一个广泛使用的Java构建工具,它允许开发者通过XML配置文件定义构建任务,如编译、打包、测试等。然而,Ant本身并不包含依赖管理的功能,这就是Apache Ivy发挥作用的地方。 Apache Ivy能够帮助Java开发者管理...

    apache-ivy-2.4.0-src.tar.gz

    7. **多配置**:Ivy的配置概念允许一个模块有多个构建变体,每个变体有自己的依赖集。这在处理不同环境(如开发、测试和生产)或提供不同功能的模块时非常有用。 8. **插件系统**:Ivy有一个强大的插件系统,允许...

    apache-ivy-2.5.0-rc1-bin-with-deps.zip

    3. **XML配置**:Ivy的配置文件(通常为ivy.xml)定义了项目的依赖信息,包括模块、版本、依赖关系、排除项等。 4. **与Ant集成**:Ivy可以无缝集成到Ant构建过程中,通过Ant任务调用Ivy进行依赖解析和下载。 5. *...

    apache-ivy-2.5.0-rc1-src.zip

    它使用XML格式的配置文件(通常命名为ivy.xml)来定义项目的依赖关系。这些文件详细列出了项目所依赖的模块及其版本,使得在整个项目生命周期中,依赖关系的管理和更新变得简单。 在"apache-ivy-2.5.0-rc1-src.zip...

    apache-ivy-2.4.0-src.zip

    4. **示例**:可能包含示例项目,展示如何在实际项目中配置和使用Ivy。 5. **配置文件**:如`ivysettings.xml`,这是Ivy的默认设置文件,可以定制Ivy的行为,如定义仓库位置、解决策略等。 6. **许可文件**:通常...

Global site tag (gtag.js) - Google Analytics