【问题标题】:Can't get Apache Ivy not to download sources from Spring repository无法让 Apache Ivy 不从 Spring 存储库下载源代码
【发布时间】:2011-09-24 06:26:29
【问题描述】:

在我的项目中,我使用 Ivy 来解决依赖关系。我使用 Spring 的存储库。问题是我不想下载源代码和许可证/通知文件。产生问题的设置如下:

ivyconf.xml

<ivysettings>
<settings defaultResolver="default" />
<resolvers namespace="apache">
    <chain name="default" returnFirst="true">

    <url name="com.springsource.repository.bundles.release">
        <!--<ivy pattern="http://repository.springsource.com/ivy/bundles/release/[organisation]/[module]/[revision]/[artifact]-[revision].[ext]" />-->
        <!-- or this one? -->
        <ivy pattern="http://repository.springsource.com/ivy/bundles/release/[organisation]/[module]/[revision]/ivy-[revision].xml" />
        <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]" />-->
        <ivy pattern="http://repository.springsource.com/ivy/bundles/external/[organisation]/[module]/[revision]/ivy-[revision].xml" />
        <artifact pattern="http://repository.springsource.com/ivy/bundles/external/[organisation]/[module]/[revision]/[artifact]-[revision].[ext]" />
    </url>

    </chain>
</resolvers>

</ivysettings>

ivy.xml

<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="file:///home/nikem/workspace/ark/test.xsl"?>
<ivy-module version="2.0"
            xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
            xsi:noNamespaceSchemaLocation="http://ant.apache.org/ivy/schemas/ivy.xsd">

<info organisation="com.foo-corp" module="bar" /> 

<configurations>
    <conf name="runtime" description="Modules needed for running the application"/>
</configurations>

<dependencies>

    <dependency org="org.apache.batik" name="com.springsource.org.apache.batik.dom.svg" rev="1.7.0" conf="runtime->runtime">
        <exclude type="src" ext="jar" conf="runtime"/>
    </dependency>
    <dependency org="org.apache.batik" name="com.springsource.org.apache.batik.bridge" rev="1.7.0" conf="runtime->runtime" />

    <exclude type="src" ext="jar" conf="runtime"/>
    <exclude type="javadoc" ext="jar" conf="runtime"/>
    <exclude type="license" ext="txt" conf="runtime"/>
</dependencies>
</ivy-module>

build.xml

<project name="yunowork" default="ivy-runtime" basedir="." xmlns:ivy="antlib:org.apache.ivy.ant">

<property name="run.lib.dir" value="projlib"/>
<property name="lib.dir" value="lib"/>

<taskdef resource="org/apache/ivy/ant/antlib.xml" uri="antlib:org.apache.ivy.ant" classpath="${lib.dir}/ivy.jar"/>

<target name="clean-lib" description="Removes all libraries">
    <delete dir="${run.lib.dir}" includes="*.jar"/>
</target>

<target name="ivy-clean-cache" description="Cleans Ivy cache">
    <ivy:cleancache />
</target>

<target name="ivy-runtime">
    <ivy:settings file="ivyconf.xml"/>
    <ivy:resolve file="ivy.xml"/>
    <ivy:retrieve pattern="${run.lib.dir}/[artifact].[ext]" conf="runtime"/>
</target>
</project>

在 Ivy 的缓存中我看到了:

<publications>
    <artifact name="com.springsource.org.apache.batik.dom.svg"/>
    <artifact name="com.springsource.org.apache.batik.dom.svg-sources" type="src" ext="jar"/>
    <artifact name="license" type="license" ext="txt"/>
    <artifact name="notice" type="license" ext="txt"/>
</publications>

它们默认为所有配置发布。

问题是:为什么不排除源文件和许可证文件?

【问题讨论】:

  • 我在 Ivy 源代码的 MatcherHelper 类中添加了日志记录,并使用了这个更新版本。它表明排除规则的类型和扩展名不匹配,因为工件具有“xml”作为扩展名和“ivy”作为名称和类型。这很奇怪。

标签: ant repository ivy


【解决方案1】:

实现我想要的一个解决方法(没有来源,没有许可证/通知文件)是将type 添加到&lt;ivy:retrieve&gt; 任务。

<ivy:retrieve pattern="${run.lib.dir}/[artifact].[ext]" type="jar" />

在这种情况下,我不需要任何&lt;exclude&gt; 标签。然而,这并没有回答为什么 exclude 一开始就不起作用的问题。

【讨论】:

    【解决方案2】:

    你可以试试(省略第一个依赖中的嵌套排除):

    <dependencies>
    
        <dependency org="org.apache.batik" name="com.springsource.org.apache.batik.dom.svg" rev="1.7.0" conf="runtime->runtime"/
        <dependency org="org.apache.batik" name="com.springsource.org.apache.batik.bridge" rev="1.7.0" conf="runtime->runtime" />
    
        <exclude type="src" ext="jar" conf="runtime"/>
        <exclude type="javadoc" ext="jar" conf="runtime"/>
        <exclude type="license" ext="txt" conf="runtime"/>
    </dependencies>
    

    我感觉深度嵌套的排除可能会被窃听。见这里:

    How to exclude commons logging dependency of spring with ivy?

    只是一种预感,一切似乎都很好。

    【讨论】:

      【解决方案3】:

      我在 Spring here 上回答了类似的问题。

      简单来说就是:

      1) 清除你的常春藤缓存

      2) 更改您的 ivy 设置文件以使用 Spring Maven 存储库:

      <ivysettings>
          <settings defaultResolver="chain"/>
          <resolvers>
              <chain name="chain">
                  <ibiblio name="central" m2compatible="true"/>
                  <ibiblio name="spring-release"  root="http://repository.springsource.com/maven/bundles/release" m2compatible="true"/>
                  <ibiblio name="spring-external" root="http://repository.springsource.com/maven/bundles/external" m2compatible="true"/>
              </chain>
          </resolvers>
      </ivysettings>
      

      3) 尝试更改您的配置映射:

          <dependency .... conf="runtime->runtime"/>
      

      到:

          <dependency .... conf="runtime->default"/>
      

      【讨论】:

        【解决方案4】:

        与其尝试排除所有您不想要的工件,不如尝试明确地仅包括您确实想要的工件:

        <dependency org="org.apache.batik" name="com.springsource.org.apache.batik.dom.svg" rev="1.7.0" conf="runtime->runtime">
            <artifact name="com.springsource.org.apache.batik.dom.svg"/>
        </dependency>
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2013-02-12
          • 1970-01-01
          • 2017-12-16
          • 2018-06-26
          • 2012-04-28
          • 1970-01-01
          • 2010-11-08
          • 1970-01-01
          相关资源
          最近更新 更多