`

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

相关推荐

    environments-maven-plugin-0.0.17.zip

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

    mondrian-3.1.6.13364源码配置步骤

    [get] Getting: http://repo1.maven.org/maven2/org/apache/ivy/ivy/2.1.0/ivy-2.1.0.jar [get] To: D:\Mondrianresource\modrian3\ivy\ivy.jar [get] Not modified - so not downloaded install-ivy: resolve:...

    IDEA+sbt配置1

    ### IDEA + sbt 配置详解 ...这不仅有助于提高开发效率,还能让开发者更好地享受IDE带来的便利。在未来的大数据开发中,Scala将继续扮演重要的角色,掌握这些基础配置方法对于开发人员来说至关重要。

    idea sbt更新资源库

    国内大家肯定遇到idea 更新sbt相关插件慢的问题...repox-ivy: http://repox.gtan.com:8078/, [organization]/[module]/(scala_[scalaVersion]/)(sbt_[sbtVersion]/)[revision]/[type]s/[artifact](-[classifier]).[ext]

    如何运行sodor的emulator1

    huaweicloud-ivy: https://repo.huaweicloud.com/repository/ivy/, [organization]/[module]/(scala_[scalaVersion]/)(sbt_[sbtVersion]/)[revision]/[type]s/[artifact](-[classifier]).[ext] ``` 完成上述步骤...

    Kafka-manager安装步骤.docx

    typesafe:http://repo.typesafe.com/typesafe/ivy-releases/,[organization]/[module]/(scala_[scalaVersion]/)(sbt_[sbtVersion]/)[revision]/[type]s/[artifact](-[classifier]).[ext],bootOnly sonatype-oss-...

Global site tag (gtag.js) - Google Analytics