常春藤配置:为什么这些之间存在差异?

时间:2012-07-16 18:58:40

标签: settings ivy

<ivy-module version="2.0">
    <info organisation="com.travelclick" module="CoreWebServices" revision="4.1"/>
    <configurations defaultconfmapping="default">
        <conf name="runtime" visibility="public"/>
        <conf name="default" visibility="public"  extends="runtime"/>
    </configurations>

    <dependencies>
        <dependency org="com.travelclick"
            name="commons-all"
            rev="4.1"
            conf="default->default"/>

        <dependency org="com.sun.messaging.mq"
            name="jms"
            rev="4.5.2"
            conf="default->default"/>

        <dependency org="org.jboss.common"
            name="servlet-api"
            rev="4.2"
            conf="default->default"/>

        <dependency org="com.fiorano"
            name="framework"
            rev="2.0"
            conf="default->default"/>

        <dependency org="com.fiorano"
            name="fmq-client"
            rev="9.3.0"
            conf="default->default"/>

        <dependency org="commons-codec"
            name="commons-codec"
            rev="1.3"
            conf="default->default"/>

        <dependency org="commons-httpclient"
            name="commons-httpclient"
            rev="3.1"
            conf="default->default"/>

        <dependency org="commons-lang"
            name="commons-lang"
            rev="2.2"
            conf="default->default"/>

        <dependency org="commons-pool"
            name="commons-pool"
            rev="1.4"
            conf="default->default"/>
    </dependencies>
</ivy-module>

请注意,所有依赖项都配置为default->default

在我的build.xml中,我有以下声明:

 <ivy:resolve conf="default"/>
 <ivy:cachepath pathid="all.libs" conf="default"/>

注意我正在使用默认配置。

我使用all.libs路径将库下载到我正在构建的战争中。

我在战争中得到以下库,这就是我想要的:

commons-all-4.1.jar
commons-codec-1.3.jar
commons-httpclient-3.1.jar
commons-lang-2.2.jar
commons-logging-1.0.4.jar
commons-pool-1.4.jar
fmq-client-9.3.0.jar
framework-2.0.jar
jms-4.5.2.jar
servlet-api-4.2.jar

现在,我将删除配置信息。这与删除ivy.xml部分并删除所有<configurations>的{​​{1}}相同:

conf=default->default

当然,我还必须更改<ivy-module version="2.0"> <info organisation="com.travelclick" module="CoreWebServices" revision="4.1"/> <dependencies> <dependency org="com.travelclick" name="commons-all" rev="4.1"/> <dependency org="com.sun.messaging.mq" name="jms" rev="4.5.2"/> <dependency org="org.jboss.common" name="servlet-api" rev="4.2"/> <dependency org="com.fiorano" name="framework" rev="2.0"/> <dependency org="com.fiorano" name="fmq-client" rev="9.3.0"/> <dependency org="commons-codec" name="commons-codec" rev="1.3"/> <dependency org="commons-httpclient" name="commons-httpclient" rev="3.1"/> <dependency org="commons-lang" name="commons-lang" rev="2.2"/> <dependency org="commons-pool" name="commons-pool" rev="1.4"/> </dependencies> </ivy-module> 以删除对默认配置的引用:

build.xml

但是,现在看看包含哪些内容:

 <ivy:resolve/>
 <ivy:cachepath pathid="all.libs"/>

为什么,当我将所有内容设置为默认时,只会下载实际的jar而不是源和javadoc jars 。然而,当我删除所有配置时,javadoc和源 jar 也被下载。

事实上,Maven存储库中各种jar的配置存储在哪里?我可以在Maven存储库中看到javadoc和source,但我没有看到任何关于各种配置的信息。常春藤如何知道是否包含来源 javadoc 罐子?

1 个答案:

答案 0 :(得分:3)

常春藤中没有标准默认configuration。每个常春藤文件都在conf部分中定义了自己的一组<configuration> ..</configuration>

第一个示例中,您定义了default并将其映射到工件的default配置。这些依赖项是maven工件,而常春藤将maven范围映射到default(Ivy读取maven pom文件并在缓存中为其创建常春藤文件)。所以基本上你很幸运,default conf存在于配置文件的常春藤文件中。

conf default是一个映射的maven范围,在常春藤中不作为预定义的标准conf存在。

第二个示例中,您省略了conf="default->default"which is equivalent to conf="*->*",并且意味着:将依赖项中的所有内容映射到此conf中常春藤文件。

This question answers how ivy maps maven scopes to ivy configurations

简而言之:

  • default映射到maven范围默认值,它仅引用jar
  • 声明没有范围映射到常春藤配置*,它引用了所有可用的配置,因此引用了所有可用的maven工件。