ANT Ivy:如何检索库并将其可传递的依赖项放在不同的文件夹中



我正在做一个分析Maven仓库中的库的项目。我正在使用Ivy来检索库(例如。log4j)从Maven仓库。但是Ivy也会在同一个文件夹中下载它的传递依赖项!我怎么把它们分开?

秘诀在于配置映射,这是ivy中的一个强大概念。当从ivy存储库下载时,配置允许您配置可以下载的文件的不同组合。例如,你可以指定只需要模块发布的文件,或者发布的文件及其所有依赖项。这是一个非常灵活的功能。

当ivy从Maven存储库下载时,它使用ibiblio解析器。Maven存储库不支持配置,所以ivy自行创建了它们,并提供了一套标准集,我在这里详细记录了这些标准集:

  • maven作用域如何被ivy
  • 映射到ivy配置

长话短说,当您指定依赖项时,配置映射告诉ivy要从远程存储库检索哪些远程文件。我建议您总是指定一个配置并获得更多的控制。一旦你了解了配置,你就了解了ivy。

<标题> 例子

没有配置

如果没有映射,所有与远程Maven模块相关的文件都将被检索。

├── build.xml
└── lib
    ├── activation-1.1.jar
    ├── geronimo-jms_1.1_spec-1.0.jar
    ├── javaee-api-5.0-2.jar
    ├── log4j-1.2.17.jar
    ├── log4j-1.2.17-javadoc.jar
    ├── log4j-1.2.17-sources.jar
    └── mail-1.4.3.jar
构建文件:

<project name="demo" default="resolve" xmlns:ivy="antlib:org.apache.ivy.ant">
  <target name="resolve">
    <ivy:retrieve pattern="lib/[artifact]-[revision](-[classifier]).[ext]">
      <dependency org="log4j" name="log4j" rev="1.2.17"/>
    </ivy:retrieve>
  </target>
</project>

指定"master"配置

当ivy读取远程Maven模块时,"主"配置仅是远程模块的文件,没有依赖

├── build.xml
└── lib
    └── log4j-1.2.17.jar
构建文件:

<project name="demo" default="resolve" xmlns:ivy="antlib:org.apache.ivy.ant">
  <target name="resolve">
    <ivy:retrieve pattern="lib/[artifact]-[revision](-[classifier]).[ext]">
      <dependency org="log4j" name="log4j" rev="1.2.17" conf="master"/>
    </ivy:retrieve>
  </target>
</project>

指出:

    conf="master"映射告诉ivy从远程master配置中检索

使用ivy文件

这是一个更复杂的示例,演示了ivy的真正功能以及如何指定多个配置和映射。这里有两个目录。一个只包含log4j jar,另一个额外包含远程模块的"可选"依赖项。如果您查看远程POM,您将看到它们具有不同的作用域。

├── build.xml
├── ivy.xml
├── lib1
│   └── log4j-1.2.17.jar
└── lib2
    ├── activation-1.1.jar
    ├── geronimo-jms_1.1_spec-1.0.jar
    ├── log4j-1.2.17.jar
    └── mail-1.4.3.jar

构建文件

<project name="demo" default="resolve" xmlns:ivy="antlib:org.apache.ivy.ant">
  <target name="resolve">
    <ivy:resolve/>
    <ivy:retrieve pattern="lib1/[artifact]-[revision](-[classifier]).[ext]" conf="noDependencies"/>
    <ivy:retrieve pattern="lib2/[artifact]-[revision](-[classifier]).[ext]" conf="withDependencies"/>
  </target>
</project>
常春藤文件

<ivy-module version="2.0">
  <info organisation="com.myspotontheweb" module="demo"/>
  <configurations>
    <conf name="noDependencies" description="File grouping that has no transitive dependencies"/>
    <conf name="withDependencies" description="File grouping that contains dependencies"/>
  </configurations>
  <dependencies>
    <dependency org="log4j" name="log4j" rev="1.2.17" conf="noDependencies->master; withDependencies->master,optional"/>
  </dependencies>
</ivy-module>

相关内容

  • 没有找到相关文章

最新更新