【问题标题】:Using Ivy, Maven and the Issue with POMs使用 Ivy、Maven 和 POM 的问题
【发布时间】:2011-04-24 20:05:33
【问题描述】:

我最近一直在寻找并与 IVY 一起玩一个新项目。我知道这个话题有两个阵营,人们选择其中一个的原因有很多。这个问题的重点不是那个。

我感兴趣的是,当我使用 IVY 说使用 Maven 2 存储库获取 Spring Frame 时,我得到了大量的 Jar 文件,然后在找到正确的版本时出现问题,我必须排除项目等。现在,如果我关闭 Poms,那么我只会得到 spring 框架 jar 并且一切正常。

是否有这么多 Jar 文件通过使用 POM 交付的原因 - 如果您使用纯 Maven 解决方案,这些相同数量的 Jar 文件会出现吗?


@Pascal_Thivent 这是我的意思的更新。

这是我得到的输出:

[ivy:retrieve]      ::::::::::::::::::::::::::::::::::::::::::::::
[ivy:retrieve]      ::          UNRESOLVED DEPENDENCIES         ::
[ivy:retrieve]      ::::::::::::::::::::::::::::::::::::::::::::::
[ivy:retrieve]      :: javax.ejb#ejb;3.0: not found
[ivy:retrieve]      :: com.oracle#toplink-essentials;2.41: not found
[ivy:retrieve]      :: com.oracle#oc4j;1.0: not found
[ivy:retrieve]      :: jexcelapi#jxl;2.6.6: not found
[ivy:retrieve]      ::::::::::::::::::::::::::::::::::::::::::::::
[ivy:retrieve] 
[ivy:retrieve]      ::::::::::::::::::::::::::::::::::::::::::::::
[ivy:retrieve]      ::              FAILED DOWNLOADS            ::
[ivy:retrieve]      :: ^ see resolution messages for details  ^ ::
[ivy:retrieve]      ::::::::::::::::::::::::::::::::::::::::::::::
[ivy:retrieve]      :: javax.faces#jsf-api;1.1!jsf-api.jar
[ivy:retrieve]      :: com.bea.wlplatform#commonj-twm;1.1!commonj-twm.jar
[ivy:retrieve]      :: com.oracle.toplink#toplink;10.1.3!toplink.jar
[ivy:retrieve]      :: com.sun.jdmk#jmxtools;1.2.1!jmxtools.jar
[ivy:retrieve]      :: com.sun.jmx#jmxri;1.2.1!jmxri.jar
[ivy:retrieve]      ::::::::::::::::::::::::::::::::::::::::::::::

这是我的 ivy.xml

    <dependencies>
    <dependency org="jstl" name="jstl" rev="1.1.2"/>
    <dependency org="commons-logging" name="commons-logging" rev="1.1.1" >
        <exclude org="com.sun.jdmk"/>
        <exclude org="com.sun.jmx"/>
        <exclude org="javax.jms"/>
    </dependency>
    <dependency org="commons-lang" name="commons-lang" rev="2.5">
        <exclude org="com.sun.jdmk"/>
        <exclude org="com.sun.jmx"/>
        <exclude org="javax.jms"/>
    </dependency>
    <dependency org="org.springframework" name="spring" rev="2.5.6"/>
    <dependency org="org.springframework" name="spring-webmvc" rev="2.5.6"/>

</dependencies>

这是我的常春藤设置

<ivysettings>
<settings defaultResolver="myChain" />
<resolvers>
    <url name="com.springsource.repository.bundles.release">
        <ivy pattern="http://repository.springsource.com/ivy/bundles/release/[organisation]/[module]/[revision]/[artifact]-[revision].[ext]" />
        <artifact pattern="http://repository.springsource.com/ivy/bundles/release/[organisation]/[module]/[revision]/[artifact]-[revision].[ext]" />
    </url>
    <url name="com.springsource.repository.bundles.external">
        <ivy pattern="http://repository.springsource.com/ivy/bundles/external/[organisation]/[module]/[revision]/[artifact]-[revision].[ext]" />
        <artifact pattern="http://repository.springsource.com/ivy/bundles/external/[organisation]/[module]/[revision]/[artifact]-[revision].[ext]" />
    </url>

    <chain name="myChain">

        <resolver ref="com.springsource.repository.bundles.release" />
        <resolver ref="com.springsource.repository.bundles.external"/>
        <ibiblio name="jboss" m2compatible="true" root="http://repository.jboss.org/maven2" checkconsistency="false"/>
        <ibiblio name="libraries" m2compatible="true" checkconsistency="false"/>
        <ibiblio name="ilibraries-mirror" m2compatible="true" root="http://mirrors.ibiblio.org/pub/mirrors/maven2/" checkconsistency="false"/>
        <ibiblio name="sun" m2compatible="true" root="http://download.java.net/maven/2/" checkconsistency="false"/>
    </chain>
</resolvers>

【问题讨论】:

    标签: maven-2 ant ivy dependency-management


    【解决方案1】:

    这有点像在黑暗中拍摄(我不知道 “关闭 POM” 是什么意思)但我猜你实际上得到了transitive dependencies(这是简化但,如果 A 依赖于 B,并且如果你声明对 A 的依赖,你也会得到 B)。

    这是您在使用 Maven 依赖项及其元数据(POM)以及 Maven 或 Ivy 等依赖项管理解决方案时获得的功能之一。这是 Maven 的默认行为,它不能被禁用(有一个关于此的元问题,MNG-1977)。与 Ivy,it looks like it's possible,例如:

    <dependencies>  
       <dependency org="org.hibernate" name="hibernate-core"
                   rev="3.3.1.GA" conf='..'
                   transitive="false" /> 
    </dependencies>
    

    这是你的意思吗?

    另见

    【讨论】:

    • 在 ivysettings.xml 中您可以执行以下操作:
    • 但是所有这些依赖项都是必要的还是需要的?似乎用我不需要使用 Spring 的 jar 文件来膨胀我的 lib 目录。
    • @boyd4715 好的,感谢您的澄清(我认为您应该在问题中提及此类细节)。关于第二条评论,通常需要传递依赖关系,这就是声明它们的重点。也许您只是没有使用需要它们的 Spring 的一部分。但是没有具体的例子,我无法给出更具体的答案。
    • @Pascal_Thivent - 好的,我明白了,所以传递依赖的 jar 以支持在此示例中为 spring 框架提供的功能。但是,我仍然会遇到 Maven2 存储库中的 POM 不正确的问题——有人如何解决这些问题。我收到了来自 SUN 的一些商品的问题。
    • @boyd4715 是的,这是依赖管理系统的弱点之一,它依赖于良好的元数据。而且它们并不总是好的。你能用一个问题的具体例子来更新你的问题吗?
    猜你喜欢
    • 1970-01-01
    • 2021-10-15
    • 2014-09-10
    • 2013-02-15
    • 1970-01-01
    • 2011-11-08
    • 1970-01-01
    • 2018-03-25
    • 2016-01-29
    相关资源
    最近更新 更多