【问题标题】:Ivy Configuration: Why the difference between these?常春藤配置:为什么有这些区别?
【发布时间】:2012-07-17 15:52:21
【问题描述】:
<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-&gt;default。

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

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

注意我使用的是 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

现在,我将删除配置信息。这与删除了 &lt;configurations&gt; 部分并删除了所有 conf=default-&gt;default 的 ivy.xml 相同:

<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"/>

但是,现在看看包含了什么:

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

commons-httpclient-3.1-sources.jar
commons-codec-1.3-javadoc.jar
commons-codec-1.3-sources.jar
commons-lang-2.2-javadoc.jar
commons-lang-2.2-sources.jar
commons-pool-1.4-sources.jar

为什么,当我将所有内容都设置为 default 时,只下载了实际的 jar,而不是源代码和 javadoc jars。然而,当我删除所有配置时,javadoc 和源 jars 也下载了。

其实Maven仓库中各种jar的配置存放在哪里呢?我可以在 Maven 存储库中看到 javadoc 和源代码,但我没有看到任何关于各种配置 的信息。 Ivy 如何知道是否包含 sources 和 javadoc jar?

【问题讨论】:

  • 在最后一段中提到 Maven 是一个迟来的惊喜。 Maven 是如何参与其中的?您上面的 Ivy 模块文件没有提到使用 Maven 存储库。您的 Ivy 设置文件是否包含此类配置?
  • @seh:Ivy 可以使用 Maven 存储库来获取 jar 和分发 jar。我使用Artifactory。其中一些罐子是公司拥有的罐子,不在标准的 Maven 存储库中。我将它们添加到我们的 Artifactory 存储库中。

标签: settings ivy


【解决方案1】:

ivy 中没有标准的默认 configuration。每个 ivy 文件在 &lt;configuration&gt; ..&lt;/configuration&gt; 部分中定义了自己的一组 confs。

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

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

在您的第二个示例中,您省略了conf="default-&gt;default"、which is equivalent toconf="*-&gt;*",这意味着:将依赖项中的所有内容映射到此常春藤文件中的每个conf。

This question answers how ivy maps maven scopes to ivy configurations.

简而言之:

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

【讨论】:

  • 啊!谢谢。现在它是有道理的。我在回购中寻找配置信息,但我认为那只是常春藤的事情。您的意思是 default 配置不是 Ivy 中的实际 default 配置。
  • 只是想补充一点,链接也非常有用。再次感谢。它消除了我对常春藤的许多困惑。
猜你喜欢
  • 2010-11-12
  • 2011-10-26
  • 2011-10-28
  • 1970-01-01
  • 2011-09-07
  • 2020-06-28
  • 1970-01-01
  • 2010-12-31
相关资源
最近更新 更多