`

ivy教程(11)-架设仓库(3)-使用命名空间

阅读更多

现在你已经看到从一个已经存在的仓库创建你自己的仓库是如何的简单,你可能会想知道如何处理更加复杂的情况,例如当源仓库和目的地仓库不遵循相同的命名约定。

    1) 通往专业仓库之路

    我们将学习这个如何构建一个专业仓库的章节。什么是专业仓库?我们的观点是一个良好质量的仓库必须遵循有关项目命名的清晰的规则,并必须提供正确,可用,可配置和验证过的项目描述符。为了达到这些目标,我们认为你必须构建你自己的仓库。

    在前面的例子里面我们已经看到,我们可以使用一些公共仓库看来开始构建我们自己的仓库。然而,结果并不总是那么理想, 尤其是关系到使用的命名规则。 

    当你有一个已经存在的仓库并且希望从大量的不遵循相同的命名转换的公共仓库中获益时,这个问题非常常见。或者仅仅是因为你发现你作为基础使用的仓库不够一直- 为什么所有的apache commons模块不适用org.apache.commons 组织? 历史原因。但是如果你安装你自己的仓库,你可能不想从历史中蒙受损失。

    幸运的是,对于这种问题ivy有一种非常强大的答复:namespaces.

    2) 使用命名空间
    当你查看前面教程构建的仓库时,你将清晰的看到我们正在谈论的东西:所有apache commons模块使用它们自己的名字作为组织。

    因此让我们看一下通过使用namespaces ivy可以做什么(稍后我们将深入细节):

Z:\>ant commons-lang-1-0-ibiblio-with-namespace
Buildfile: build.xml

load-ivy:

init-ivy:

maven2-namespace:
[ivy:install] :: loading settings :: url = jar:file://home/xavier/.ivy2/jars/ivy.jar!/org/apache/ivy/core/settings/ivysettings.xml
[ivy:install] :: Ivy 2.0.0-beta1-local-20071130005044 - 20071130005044 :: http://ant.apache.org/ivy/ ::
:: loading settings :: file = /home/xavier/ivy/settings/ivysettings-advanced.xml
[ivy:install] :: installing apache#commons-lang;1.0 ::
[ivy:install] :: resolving dependencies ::
[ivy:install]   found apache#commons-lang;1.0 in libraries
[ivy:install] :: downloading artifacts to cache ::
[ivy:install] downloading http://repo1.maven.org/maven2/commons-lang/commons-lang/1.0/commons-lang-1.0.jar ...
[ivy:install] ........ (62kB)
[ivy:install] .. (0kB)
[ivy:install]   [SUCCESSFUL ] apache#commons-lang;1.0/commons-lang.jar[jar] (1612ms)
[ivy:install] :: installing in my-repository ::
[ivy:install]   published commons-lang to /home/xavier/ivy/myrepository/advanced/apache/commons-lang/jars/commons-lang-1.0.jar
[ivy:install]   published ivy to /home/xavier/ivy/myrepository/advanced/apache/commons-lang/ivys/ivy-1.0.xml
[ivy:install] :: install resolution report ::
        ---------------------------------------------------------------------
        |                  |            modules            ||   artifacts   |
        |       conf       | number| search|dwnlded|evicted|| number|dwnlded|
        ---------------------------------------------------------------------
        |      default     |   1   |   1   |   0   |   0   ||   1   |   1   |
        ---------------------------------------------------------------------

BUILD SUCCESSFUL
Total time: 3 seconds


    现在我们看一下我们的仓库,它看上去很好。

Z:\>dir /s /B /A:-D myrepository\advanced
Z:\myrepository\advanced\apache\commons-lang\ivys\ivy-1.0.xml
Z:\myrepository\advanced\apache\commons-lang\ivys\ivy-1.0.xml.md5
Z:\myrepository\advanced\apache\commons-lang\ivys\ivy-1.0.xml.sha1
Z:\myrepository\advanced\apache\commons-lang\jars\commons-lang-1.0.jar
Z:\myrepository\advanced\apache\commons-lang\jars\commons-lang-1.0.jar.md5
Z:\myrepository\advanced\apache\commons-lang\jars\commons-lang-1.0.jar.sha1


    我们甚至可以看一下我们仓库中的commons-lang ivy文件:

<? xml version="1.0" encoding="UTF-8" ?>
< ivy-module  version ="1.0" >
    
< info  organisation ="apache"
        module
="commons-lang"
        revision
="1.0"
        status
="integration"
        publication
="20051124062021"
        namespace
="ibiblio-maven2"
    
/>
......


    很好,我们看到组织现在是'apache'。但是ivy是从哪里获得这个的呢?

    1. 这是如何工作的?

    实际上ivy和以往一样使用同样的仓库作为源仓库,仅仅有一点不同:namespace参数。

< ibiblio     name ="libraries"
    root
="${ibiblio-maven2-root}"
    m2compatible
="true"
    namespace
="maven2"
/>


    namespace由一系列规则定义而成。这些规则基于正则表达式,并告诉ivy如何从仓库命名空间转换数据到系统命名空间,换言之,ivy时常运行的命名空间(例如ivy 缓存通常使用系统命名空间).

    对于我们调用maven2的命名空间,我们已经定义了一些规则,这里是一个:

    处理导入apache maven1项目的规则

< rule >      <!--  imported apache maven1 projects  -->
    
< fromsystem >
        
< src  org ="apache"  module =".+" />
       
        
< dest  org ="$m0"  module ="$m0" />
    
</ fromsystem >
    
< tosystem >
        
< src  org ="commons-.+"  module ="commons-.+"   />
        
< src  org ="ant.*"  module ="ant.*"   />
        ...
        
< src  org ="xmlrpc"  module ="xmlrpc"   />

        
< dest  org ="apache"  module ="$m0" />
    
</ tosystem >
</ rule >


    理解命名空间:

    (1) fromsystem : 在这里我们定义,在系统命名空间中以组织"apache"定义的项目被转换为目的地命名空间中使用模块名为组织的项目,无论修订版本是什么.例如,系统命名空间中的项目apache#commons-lang;1.0奖被转换为maven2解析器命名空间中的commons-lang#commons-lang;1.0。

    (2) tosystem : 在这里我们定义反向映射,换言之从maven2仓库转换apache项目到系统命名空间的apache项目。这里使用的规则告诉说所有组织名匹配commons-.+ (把它看成java正则表达式)项目被转换为组织是apache而模块名还是原来的项目。同样的规则被使用到其他apache项目例如ant等等。

    注意正则表达式的用法:为了识别在组织,模块和修订版本中找到的正则表达式, 使用的表示法用字母'o', 'm' 和'r'作为匹配的正则表达式的前缀。
$o0 : 在组织属性中完全匹配的值
$o1 : 在组织属性中标记的第一个匹配的语法分组
...
同样应用在模块中: $m0, $m1, ...
也用于修订版本 : $r0, $r1, ...


    好了,现在你知道命名空间背后的想法了,现在你可以检查例子中提供的整个命名空间的设置,并使用命名空间测试模块和它的依赖的安装。

    运行

ant maven2-namespace-deps


    然后你将看到结果仓库比我们第一次构件的清晰了。

    从我们的经验来看,创建命名空间的花费是值得的,如果你经常需要在你自己的仓库中,这里命名规则已经存在或者更加严格,为第三方类库增加新的模块或者修订版本。

0
0
分享到:
评论

相关推荐

    apache-ivy-2.5.0-all软件包下载(含bin部署包、src源码和deps依赖包).txt

    该软件包中包含apache-ivy-2.5.0-rc1-bin.tar.gz部署安装包、apache-ivy-2.5.0-rc1-bin-with-deps.zip依赖包、apache-ivy-2.5.0-rc1-src.zip源码。

    apache-ivy-2.3.0-bin.tar.gz

    3. `docs`目录:可能包含Ivy的用户手册和API文档,帮助开发者理解和使用Ivy。 4. `bin`目录:可能包含可执行脚本,如启动Ivy的命令行工具。 5. `conf`目录:可能包含默认的配置文件,如ivysettings.xml,用于定义...

    ivy-2.4.0-API文档-中文版.zip

    赠送jar包:ivy-2.4.0.jar; 赠送原API文档:ivy-2.4.0-javadoc.jar; 赠送源代码:ivy-2.4.0-sources.jar; 赠送Maven依赖信息文件:ivy-2.4.0.pom; 包含翻译后的API文档:ivy-2.4.0-javadoc-API文档-中文(简体)版...

    ivy-2.4.0-API文档-中英对照版.zip

    赠送jar包:ivy-2.4.0.jar; 赠送原API文档:ivy-2.4.0-javadoc.jar; 赠送源代码:ivy-2.4.0-sources.jar; 赠送Maven依赖信息文件:ivy-2.4.0.pom; 包含翻译后的API文档:ivy-2.4.0-javadoc-API文档-中文(简体)-...

    apache-ivy-2.3.0-bin.zip

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

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

    PyPI(Python Package Index)是Python开发者广泛使用的软件包仓库,它为全球的Python社区提供了一个集中的平台,用于分享、发布和下载Python库。在这个环境中,我们发现了名为"Ivy-Demo-Utils"的Python库,其版本号...

    apache-ivy-2.4.0-rc1-bin.zip_ivy

    在使用Ivy时,开发者需要注意正确配置Ivy设置,包括仓库位置、依赖版本以及传递性依赖的管理策略。同时,理解如何将Ivy与Ant等构建工具结合使用,也是提高开发流程的重要一环。通过合理利用Ivy,可以简化项目构建和...

    apache-ivy-2.0.0-beta1-src.zip

    3. **文档**:虽然这里可能没有完整的用户文档,但可能会有README文件或其他文档,解释如何构建和使用Ivy的源代码。 4. **测试用例**:在 `src/test` 目录下,可以看到Ivy的单元测试和集成测试,这些测试用例有助于...

    apache-ivy-2-5-0.rar

    3. `lib`目录:可能包含Ivy运行所需的其他库文件。 4. `conf`目录:可能包含Ivy的配置文件,如`ivysettings.xml`,用于配置仓库、分辨率策略等。 5. `examples`目录:提供了一些示例,展示如何在实际项目中使用Ivy。...

    rh-maven33-apache-ivy-2.3.0-4.17.el7.noarch.rpm

    官方离线安装包,测试可用。使用rpm -ivh [rpm完整包名] 进行安装

    apache-ivy-2.3.0-rc2-bin.zip

    3. **docs**目录:可能会包含Ivy的用户手册、API文档和其他帮助材料,对于理解和使用Ivy非常有帮助。 4. **conf**目录:可能包含Ivy的配置文件,如`ivysettings.xml`,用于定义仓库位置、代理设置等。 5. **bin**...

    Python库 | ms_ivy-1.8.4-py2-none-manylinux1_x86_64.whl

    **Python库ms_ivy-1.8.4-py2-none-manylinux1_x86_64.whl详解** 在Python编程中,库扮演着至关重要的角色,它们提供了丰富的功能和模块,帮助开发者高效地完成各种任务。`ms_ivy`是一个这样的库,它的版本为1.8.4,...

    Python库 | ivy-demo-utils-1.1.1.tar.gz

    资源分类:Python库 所属语言:Python 资源全名:ivy-demo-utils-1.1.1.tar.gz 资源来源:官方 安装方法:https://lanzao.blog.csdn.net/article/details/101784059

    apache-ivy

    8. **发布功能**:除了管理项目依赖,Ivy还可以帮助发布项目到远程仓库,供其他项目使用。 通过学习和使用Apache Ivy,开发者可以更有效地管理项目依赖,提高开发效率,保证构建的一致性和可重复性。对于大型项目...

    apache-ivy-2.3.0.rar

    2. **仓库支持**:Ivy可以连接到多种类型的仓库,如Maven中央仓库、 Ivy自身的仓库、公司内部的Nexus或Artifactory等,检索项目所需的依赖。 3. **解析依赖**:Ivy会自动解析和解决项目中所有直接和间接依赖的关系...

    rh-java-common-ivy-local-support-4.3.2-1.14.el7.noarch.rpm

    官方离线安装包,测试可用。使用rpm -ivh [rpm完整包名] 进行安装

    PyPI 官网下载 | ms_ivy-1.8.4-py2-none-manylinux1_x86_64.whl

    资源来自pypi官网。 资源全名:ms_ivy-1.8.4-py2-none-manylinux1_x86_64.whl

    Python库 | ivy-phylo-20120228.tar.gz

    资源分类:Python库 所属语言:Python 资源全名:ivy-phylo-20120228.tar.gz 资源来源:官方 安装方法:https://lanzao.blog.csdn.net/article/details/101784059

    Python库 | ms_ivy-1.8.17-py2-none-manylinux1_x86_64.whl

    资源分类:Python库 所属语言:Python 使用前提:需要解压 资源全名:ms_ivy-1.8.17-py2-none-manylinux1_x86_64.whl 资源来源:官方 安装方法:https://lanzao.blog.csdn.net/article/details/101784059

Global site tag (gtag.js) - Google Analytics