Sky's blog

我和我追逐的梦

常用链接

统计

其他链接

友情链接

最新评论

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

   

posted on 2009-10-15 01:56 sky ao 阅读(2755) 评论(0)  编辑  收藏 所属分类: project building


只有注册用户登录后才能发表评论。


网站导航: