`

让ivy支持maven的classifier属性

阅读更多

    在maven中,对于一个依赖,除了groupId,artifactId,version这三个属性来作为标志之外,还有一个特殊的属性可用: classifier。

    以下面的testng的为例:

< dependency >
  
< groupId > org.testng </ groupId >
  
< artifactId > testng </ artifactId >
  
< version > 5.10 </ version >
  
< classifier > jdk15 </ classifier >
</ dependency >


    ivy中依赖对应的有属性org,name,rev,分别对应到maven中的groupId,artifactId,version.

    < dependency  org ="org.testng"  name ="testng"  rev ="5.10"   />


    但是ivy中没有和maven的classifier属性相对应的属性,因此无法表示classifier。这样就造成一些问题,比如上面的testng的例子,在ivy中如果将对testng的依赖定义写成上面的样子,则解析时是无法获取到我们想到的依赖 testng-5.10.jar的,从而造成解析失败:

[ivy:resolve] :: problems summary ::
[ivy:resolve] :::: WARNINGS
[ivy:resolve]         [FAILED     ] org.testng#testng;5.10!testng.jar:  (0ms)
[ivy:resolve]     ==== shared: tried
[ivy:resolve]       G:\workspace\study\java\tools\ivy\skyMailDemo\skyMail\ivy\setup\DepositorySetup\userdir/shared/org.testng/testng/5.10/jars/testng.jar
[ivy:resolve]     ==== public: tried
[ivy:resolve]       http://192.168.0.30:8081/nexus/content/groups/public/org/testng/testng/5.10/testng-5.10.jar
[ivy:resolve]         ::::::::::::::::::::::::::::::::::::::::::::::
[ivy:resolve]         ::              FAILED DOWNLOADS            ::
[ivy:resolve]         :: ^ see resolution messages for details  ^ ::
[ivy:resolve]         ::::::::::::::::::::::::::::::::::::::::::::::
[ivy:resolve]         :: org.testng#testng;5.10!testng.jar
[ivy:resolve]         ::::::::::::::::::::::::::::::::::::::::::::::


    我们可以看一下maven仓库中testng是如何保存的,首先看maven2的官方仓库:

http://repo1.maven.org/maven2/org/testng/testng/5.10/

testng-5.10-jdk14.jar                              06-Aug-2009 18:22             1002817
testng-5.10-jdk14.jar.md5                          06-Aug-2009 18:25                 128
testng-5.10-jdk14.jar.sha1                         06-Aug-2009 18:25                 136
testng-5.10-jdk15.jar                              06-Aug-2009 18:22              871404
testng-5.10-jdk15.jar.md5                          06-Aug-2009 18:25                 128
testng-5.10-jdk15.jar.sha1                         06-Aug-2009 18:25                 136
testng-5.10-sources.jar                            06-Aug-2009 18:23              339279
testng-5.10-sources.jar.md5                        06-Aug-2009 18:23                 130
testng-5.10-sources.jar.sha1                       06-Aug-2009 18:23                 138
testng-5.10.pom                                    06-Aug-2009 18:23                2115
testng-5.10.pom.md5                                06-Aug-2009 18:23                 122
testng-5.10.pom.sha1                               06-Aug-2009 18:23                 130


    然后再看一下ivy官方提供的maven2仓库

http://mirrors.ibiblio.org/pub/mirrors/maven2/org/testng/testng/5.10/

 testng-5.10-jdk14.jar                  06-Aug-2009 14:22  1.0M  
 testng-5.10-jdk14.jar.md5              06-Aug-2009 14:25  128   
 testng-5.10-jdk14.jar.sha1             06-Aug-2009 14:25  136   
 testng-5.10-jdk15.jar                  06-Aug-2009 14:22  851K  
 testng-5.10-jdk15.jar.md5              06-Aug-2009 14:25  128   
 testng-5.10-jdk15.jar.sha1             06-Aug-2009 14:25  136   
 testng-5.10-sources.jar                06-Aug-2009 14:23  331K  
 testng-5.10-sources.jar.md5            06-Aug-2009 14:23  130   
 testng-5.10-sources.jar.sha1           06-Aug-2009 14:23  138   
 testng-5.10.pom                        06-Aug-2009 14:23  2.1K  
 testng-5.10.pom.md5                    06-Aug-2009 14:23  122   
 testng-5.10.pom.sha1                   06-Aug-2009 14:23  130


    我们会发现,根本不存在testng-5.10.jar 这样的制品,而是有testng-5.10-jdk14.jar 和testng-5.10-jdk15.jar,即必须明确给出classifier属性以确定制品名称并下载。

    那么,在ivy中如何指定classifier属性呢?

    首先检查ivy的文档,看在ivy.xml中的dependency 元素上是否有对应的可用的属性,结果发现没有。随即祭出google大法,终于在ivy官网的JIRA系统中找到了对这个问题的处理方式(请留意粗体加下划线的内容):

    1. 修改ivy.xml文件
        增加xmlns:m的namspace定义

< ivy-module  version ="2.0"  xmlns:m ="http://ant.apache.org/ivy/maven" >


        在需要制定classifier的依赖上使用属性m:classifier

< dependency  org ="org.testng"  name ="testng"  rev ="5.10"  m:classifier ="jdk15"   />


    2. 修改ivysettings,在pattern中增加对classifier的支持

    < resolvers >
        
< ibiblio  name ="public"  m2compatible ="true"  root ="http://192.168.0.30:8081/nexus/content/groups/public/"  pattern ="[organisation]/[module]/[revision]/[artifact]-[revision](-[classifier]).[ext]" />
    
</ resolvers >


   

0
0
分享到:
评论
1 楼 daquan198163 2011-11-27  
有点小问题啊,貌似应该这样的:
<ivy-module version="2.0" xmlns:e="http://ant.apache.org/ivy/extra">
<dependency org="org.testng" name="testng" rev="5.10" conf="test->default">
            <artifact name="testng" type="jar" ext="jar" e:classifier="jdk15" />
        </dependency>

相关推荐

    ivy-maven-plugin

    将 apache Ivy 依赖项添加到 Maven 项目的插件。 这是一个分支,它修复了对传递依赖的支持。 配置 常春藤目标可以配置为 settings指向 Ivy 设置 (xml) 文件的字符串文件路径或 URL。 传递一个布尔值(默认为false)...

    基于Java的多工程属性文件统一管理Maven插件设计源码

    本项目是一个基于Java的多工程属性文件统一管理Maven插件设计源码,共包含21个文件,其中包括17个Java源文件。系统采用了Java技术,为用户提供了一个便捷的Maven插件解决方案,用于多工程属性文件的统一管理。系统...

    maven 3.5.2 maven 3.5.2 maven 3.5.2

    5. **支持Java 9**: Maven 3.5.2兼容Java 9,允许开发者在新的JDK环境下使用Maven。 **Maven 的使用流程** 1. **创建项目**: 使用`mvn archetype:generate`命令可以快速创建一个基于模板的新项目。 2. **编辑POM*...

    jdk11_maven3.6_win_x64.zip

    标题“jdk11_maven3.6_win_x64.zip”指的是一个包含了Java Development Kit (JDK) 11的Oracle版本以及Maven 3.6的Windows x64平台安装包。这个压缩文件是为了在64位Windows操作系统上同时安装和使用这两个重要的Java...

    Maven兼容jdk1.7版本

    4. **多模块项目支持**:Maven 3.0.5能有效地管理大型的多模块项目,简化构建过程。 在实际使用中,如果项目需要与JDK 1.7兼容,并且想要利用Maven的强大功能,那么选择"Maven 3.0.5"是一个明智的决策。同时,要...

    安装的maven3.6.1

    ** Maven 概述 ** Maven 是一个Java项目管理和综合工具,由Apache软件基金会开发。它简化了构建、依赖管理和项目文档的生成过程。Maven使用一个统一的项目对象模型(Project Object Model,POM),使得项目的配置...

    maven安装maven安装maven安装maven安装maven安装

    maven安装maven安装maven安装maven安装maven安装maven安装maven安装maven安装maven安装maven安装maven安装maven安装maven安装maven安装maven安装maven安装maven安装maven安装maven安装maven安装maven安装maven安装...

    maven window下安装包

    第14章:灵活的构建/14.1 Maven的属性/14.1.2 属性分类/14.1.2.3 自定义属性(properties) 第14章:灵活的构建/14.1 Maven的属性/14.1.2 属性分类/14.1.2.4 Setting文件属性 第14章:灵活的构建/14.1 Maven的属性/...

    Maven3.5~3.6.3各版本下载

    Maven版本下载指南 Maven是一款基于Java的项目管理和构建工具,由 Apache Software Foundation 开发和维护。Maven的主要功能是帮助开发者快速构建、测试和部署项目。在实际项目开发中,Maven发挥着至关重要的作用。...

    开源工具Maven3.9.4版本压缩包

    Maven3.9.4版本压缩包,仅供学习参考,更新版本请前往Maven官方下载;Maven3.9.4版本压缩包,仅供学习参考,更新版本请前往Maven官方下载;Maven3.9.4版本压缩包,仅供学习参考,更新版本请前往Maven官方下载;Maven...

    maven之开源中国Maven库

    【标题】"maven之开源中国Maven库" 指的是使用 Maven,一个流行的Java项目管理和集成工具,与开源中国的Maven仓库进行交互。开源中国Maven库是中国的一个开源软件资源平台,提供了大量的开源Java库,使得开发者可以...

    maven.rar apache-maven-3.5.4

    - 项目对象模型(POM):Maven的配置文件,包含了项目的属性、依赖、构建过程等信息。 - 仓库:存储项目依赖的库,包括本地仓库(Local Repository)和远程仓库(Remote Repository),如中央仓库(Central ...

    Mac的maven安装包apache-maven-3.6.3.zip

    对于搭载M1芯片的MacBook,由于其架构变化,可能需要确保使用的是支持Apple Silicon的Maven版本,或者使用Rosetta 2转译来运行Intel版本的Maven。 通过以上步骤,你可以在Mac上成功安装和配置Apache Maven 3.6.3,...

    maven产品化支持

    【标题】:“maven产品化支持” 在软件开发过程中,Maven是一款强大的构建工具,它主要负责项目的构建、依赖管理和项目信息管理。Maven产品化支持是指将Maven用于企业级项目的构建和部署,以实现标准化、自动化和可...

    最新Maven版本:apache-maven-3.6.0

    9. **更好的兼容性**:Maven 3.6.0可能增强了对Java新版本的支持,以及与其他开发工具(如IDEA、Eclipse)的集成。 在实际使用Apache Maven 3.6.0时,开发者可以通过解压提供的`apache-maven-3.6.0`压缩包,配置...

    使用Maven导入Maven工程的视频教程

    使用Maven导入Maven工程的视频教程 仅供学习交流! 后续会持续分享相关资源,记得关注哦! 使用Maven导入Maven工程的视频教程 使用Maven导入Maven工程的视频教程 使用Maven导入Maven工程的视频教程 使用Maven导入...

    Maven3.5.4本地安装包

    3. **配置环境变量**:为了让系统能够识别并使用Maven,你需要设置`M2_HOME`环境变量指向Maven的安装路径,并将`Maven的bin目录`添加到`PATH`环境变量中。 4. **验证安装**:打开命令行窗口,输入`mvn -version`,...

    maven3.6的安装包

    为了让Maven可以在命令行中被全局调用,你需要配置系统环境变量。首先,添加 `MAVEN_HOME` 变量: - 在Windows系统中: 1. 右键点击“此电脑” -&gt; “属性” -&gt; “高级系统设置” -&gt; “环境变量”。 2. 在“系统...

    maven项目开发的maven3.3.9使用包

    1. **项目对象模型(Project Object Model,POM)**:Maven 项目的核心是POM,这是一个XML文件,包含了项目的配置信息,如项目属性、依赖、构建目标等。 2. **坐标(Coordinates)**:每个Maven项目都有唯一的标识...

    environments-maven-plugin-0.0.17.zip

    Maven和Gradle都是流行的Java构建工具,但Gradle以其灵活的Groovy DSL(领域特定语言)和对Apache Ivy的集成而受到许多开发者的青睐。`environments-maven-plugin`可能是一个与环境配置相关的Maven插件,不过在这个...

Global site tag (gtag.js) - Google Analytics