Maven 2 使用Ivy、Maven和POMs的问题

Maven 2 使用Ivy、Maven和POMs的问题,maven-2,ant,ivy,dependency-management,Maven 2,Ant,Ivy,Dependency Management,最近,为了一个新项目,我一直在看常春藤,和它玩耍。我知道在这个话题上有两个阵营,人们选择其中一个的原因很多。这个问题的重点不是这个 我感兴趣的是,当我使用IVY说使用Maven 2存储库获取Spring框架时,我得到了大量的Jar文件,然后在找到正确的版本时出现了问题,我必须排除项目等。现在,如果我关闭Poms,那么我只获得Spring框架Jar,一切正常 有没有一个原因可以解释为什么这么多的Jar文件都是通过POM交付的?如果使用纯Maven解决方案,这些Jar文件的数量是否相同 @帕斯卡·

最近,为了一个新项目,我一直在看常春藤,和它玩耍。我知道在这个话题上有两个阵营,人们选择其中一个的原因很多。这个问题的重点不是这个

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

有没有一个原因可以解释为什么这么多的Jar文件都是通过POM交付的?如果使用纯Maven解决方案,这些Jar文件的数量是否相同


@帕斯卡·蒂文特 这里是我的意思的更新

这是我得到的输出:

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


这有点像是瞎猜(我不知道“关闭POMs”是什么意思),但我猜你实际上得到了(这是简化的,但是,如果a依赖于B,如果你声明依赖于a,你也会得到B)

这是使用Maven依赖项及其元数据(POM)和Maven或Ivy等依赖项管理解决方案时获得的特性之一。这是Maven的默认行为,不能禁用(这有一个元问题,)。使用常春藤,例如:


这就是你的意思吗

另见
  • 依赖机制简介
  • Maven:完整的参考资料

在ivysettings.xml中,您可以执行以下操作:但所有这些依赖项都是必需的还是必需的?似乎在我的lib目录中增加了jar文件,这些文件似乎不是我使用Spring所必需的。@boyd4715啊,好的,谢谢你的澄清(我想你应该在你的问题中提到这类细节)。关于第二条评论,通常需要传递依赖项,这就是声明它们的全部要点。也许你只是没有使用Spring中需要它们的部分。但是没有一个具体的例子,我无法给出更具体的答案。@Pascal_Thivent-好的,我理解,因此传递依赖于传递的JAR以支持spring框架提供的功能。但是,我仍然会遇到一些问题,其中POM在Maven2存储库中是不正确的——有人如何解决这些问题。我在SUN的一些项目上遇到了问题。@boyd4715是的,这是依赖关系管理系统的弱点之一,它依赖于良好的元数据。它们并不总是好的。你能用一个问题的具体例子更新你的问题吗?
<dependencies>  
   <dependency org="org.hibernate" name="hibernate-core"
               rev="3.3.1.GA" conf='..'
               transitive="false" /> 
</dependencies>