`

让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)...

    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的属性/...

    Maven 命令Maven 命令Maven 命令

    Maven 命令Maven 命令Maven 命令Maven 命令Maven 命令Maven 命令Maven 命令Maven 命令Maven 命令Maven 命令Maven 命令Maven 命令Maven 命令Maven 命令Maven 命令Maven 命令Maven 命令

    maven3.0 maven3.0

    maven3.0maven3.0maven3.0maven3.0maven3.0maven3.0maven3.0maven3.0maven3.0maven3.0

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

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

    chm版本Maven教程

    转换基于Maven的Web应用程序支持Eclipse IDE 使用Maven模板创建项目 使用Maven构建项目 使用Maven清理项目 使用Maven运行单元测试 将项目安装到Maven本地资源库 生成基于Maven的项目文档站点 使用“mvn site-deploy...

    Maven全版本资源,Maven 3.0.5-3.8.5,每个版本包含4个文件,Maven3全资源打包下载,Maven全集

    apache-maven-3.0.5 apache-maven-3.1.1 apache-maven-3.2.5 apache-maven-3.3.9 apache-maven-3.5.4 apache-maven-3.6.3 apache-maven-3.8.5 每个版本包含4个文件: apache-maven-3.8.5-bin.tar.gz apache-maven-...

    jdk11_maven3.6_win_x64.zip

    jdk11 oracle windows x64版本 加 maven3.6

    maven 3.5.2 maven 3.5.2 maven 3.5.2

    maven 工具 maven 工具 maven 工具 maven 工具 maven 工具

    maven教程-maven教程-maven教程

    maven教程maven教程maven教程maven教程maven教程maven教程maven教程maven教程maven教程maven教程maven教程maven教程maven教程maven教程

    maven历史版本下载

    maven

    apache-maven-3.8.6.zip

    apache-maven-3.8.6-bin.zip apache-maven-3.8.6-bin.zip apache-maven-3.8.6-bin.zip apache-maven-3.8.6-bin.zip apache-maven-3.8.6-bin.zip apache-maven-3.8.6-bin.zip apache-maven-3.8.6-bin.zip apache-...

    Maven常用命令 Maven Maven学习

    Maven常用命令 Maven Maven学习

    maven_repository .zip

    为了让Maven能够正确获取到jar包,第三方jar包必须放置到本地仓库的正确位置上。Maven已经提供了maven-install-plugin这样的插件能够使Jar包的安装过程更加容易、更少出错。可以用下面的命令安装一个JAR包到本地仓库...

    maven API maven API

    maven api

    maven打包 maven打jar包详细步骤

    maven打包 maven打jar包详细步骤

    maven3.6maven3.6maven3.6

    maven3.6maven3.6maven3.6

    apache-maven-3.8.5

    Maven项目对象模型(POM),可以通过一小段描述信息来管理项目的构建,报告和文档的项目管理工具软件。 Maven 除了以程序构建能力为特色之外,还提供高级项目管理工具。由于 Maven 的缺省构建规则有较高的可重用性,...

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

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

Global site tag (gtag.js) - Google Analytics