首页 文章

Apache Ivy:使用模式解决依赖关系

提问于
浏览
0

我想使用ivy:resolve下载工件,但使用的是使用[conf]属性的模式 . 所以我在 IvySettings.xml 中定义了以下内容

<caches defaultCacheDir="${env.IvyLib}\cache" artifactPattern="[conf]\[artifact].[ext]" checkUpToDate="false" />

注意模式

artifactPattern="[conf]\[artifact].[ext]"

,所以我想解决依赖关系并根据其配置将它们放在一个文件夹中 . 我在 Ivy.xml 中定义了以下配置

<configurations>
    <conf name="ConfGroup1" description="First group of dependencies"/>
    <conf name="ConfGroup2" description="Second group of dependencies"/>
</configurations>
<dependencies>
    <dependency org="derby-db" name="derby-db" rev="10.2.2.0" conf="ConfGroup1->default">
        <artifact name="derby-db" type="zip" ext="zip" />
    </dependency>
    <dependency org="derby-db" name="derby-db" rev="10.4.1.3" conf="ConfGroup2->default">
        <artifact name="derby-db" type="zip" ext="zip" />
    </dependency>
</dependencies>

现在,依赖关系得到了很好的解决,但是只为配置创建了一个文件夹: default . 没有为ConfGroup1和ConfGroup2配置创建任何文件夹 . 如何在解析期间根据我定义的配置创建多个文件夹?

P.S.,我知道这可以使用常 Spring 藤来实现:检索,但我不想使用它,因为它将涉及在ivy:resolve之后将常 Spring 藤缓存中的工件复制到另一个地方,并且我有数千兆字节的工件 . 单独复制它们会在构建期间产生额外的开销,由于项目要求,我无法负担 .

1 回答

  • 0

    常 Spring 藤retrieve task有一个符号链接选项,可用于节省空间 .

    示例

    ├── build.xml
    ├── ivysettings.xml
    ├── ivy.xml
    └── target
        ├── ivy-reports
        │   ├── ivy-report.css
        │   ├── myorg-mymod-ConfGroup1.html
        │   └── myorg-mymod-ConfGroup2.html
        └── lib
            ├── ConfGroup1
            │   └── db-derby-10.12.1.1.zip -> /home/mark/.ivy2/cache/db-derby/db-derby/zips/db-derby-10.12.1.1.zip
            └── ConfGroup2
                └── db-derby-10.11.1.1.zip -> /home/mark/.ivy2/cache/db-derby/db-derby/zips/db-derby-10.11.1.1.zip
    

    build.xml

    <project name="demo" default="resolve" xmlns:ivy="antlib:org.apache.ivy.ant">
    
        <property name="build.dir" location="target"/>
    
        <target name="resolve">
            <ivy:resolve/>
    
            <ivy:report todir='${build.dir}/ivy-reports' graph='false' xml='false'/>
    
            <ivy:retrieve pattern='${build.dir}/lib/[conf]/[module]-[revision].[ext]' symlink="true"/>
        </target>
    
    </project>
    

    ivy.xml

    <ivy-module version="2.0">
      <info organisation="myorg" module="mymod"/>
    
      <configurations>
        <conf name="ConfGroup1" description="First group of dependencies"/>
        <conf name="ConfGroup2" description="Second group of dependencies"/>
      </configurations>
      <dependencies>
        <dependency org="db-derby" name="db-derby" rev="10.12.1.1" conf="ConfGroup1->default">
            <artifact name="db-derby" type="zip" ext="zip" />
        </dependency>
        <dependency org="db-derby" name="db-derby" rev="10.11.1.1" conf="ConfGroup2->default">
            <artifact name="db-derby" type="zip" ext="zip" />
        </dependency>
      </dependencies>
    
    </ivy-module>
    

    ivysettings.xml

    <ivysettings>
      <settings defaultResolver="central"/>
      <resolvers>
        <ibiblio name="central" m2compatible="true" />
        <url name="db-derby">
          <artifact pattern="http://ftp.heanet.ie/mirrors/www.apache.org/dist//db/derby/[module]-[revision]/[module]-[revision]-bin.[ext]"/>
        </url>
      </resolvers>
      <modules>
        <module organisation="db-derby" resolver="db-derby" />
      </modules>
    </ivysettings>
    

相关问题