基本示例

以下示例声明了三个依赖项并将它们添加到dependency.classpath pathId。

<artifact:dependencies pathId="dependency.classpath">
  <dependency groupId="junit" artifactId="junit" version="3.8.2" scope="test"/>
  <dependency groupId="org.codehaus.modello" artifactId="modello-core" version="1.0-alpha-2-SNAPSHOT"/>
  <dependency groupId="javax.servlet" artifactId="servlet-api" version="2.4" scope="provided"/>
</artifact:dependencies>

pathId 可以在 Ant 构建文件中使用,例如在javac任务中。

<javac ...>
  <classpath refid="dependency.classpath" />
  ...
</javac>

使用文件集和版本映射器

您可以使用的另一个选项是filesetId,它将为您提供可用于将文件复制到特定位置的文件集引用。例如,要使用您的依赖项填充WEB-INF/lib,您可以使用以下内容:

<artifact:dependencies filesetId="dependency.fileset" useScope="runtime">
  <!-- Your dependency definitions go here -->
  ...
</artifact:dependencies>
<copy todir="${webapp.output}/WEB-INF/lib">
  <fileset refid="dependency.fileset" />
  <!-- This mapper strips off all leading directory information -->
  <mapper type="flatten" />
</copy>

请注意此调用中的useScope属性。这可确保您的 Web 应用程序仅包含您的编译和运行时依赖项,不包括那些仅用于测试或预计已由 servlet 容器提供的依赖项。

您还可以为每个依赖项指定范围参数。这改变了传递依赖的行为,对于构建不同类型的类路径很有用。要了解它如何影响依赖项的行为,请参阅Maven 2.0 站点上的依赖机制文档。

其他选项包括:

  • sourcesFilesetId,它将为您提供包含源工件的文件集引用(自 2.0.6 起)
  • javadocFilesetId,它将为您提供包含 javadoc 工件的文件集引用(自 2.0.9 起)
  • versionsId,可用于删除文件名中的版本号(自 2.0.7 起)

例如,要使用文件名中没有版本的依赖项填充lib ,使用相应的源代码的lib/src和使用相应的 javadocs 的lib/javadoc

<artifact:dependencies filesetId="dependency.fileset"
        sourcesFilesetId="sources.dependency.fileset"
        javadocFilesetId="javadoc.dependency.fileset"
        versionsId="dependency.versions">
  <!-- Your dependency definitions go here -->
  ...
</artifact:dependencies>
<copy todir="lib">
  <fileset refid="dependency.fileset" />
  <mapper classpathref="maven-ant-tasks.classpath"
          classname="org.apache.maven.artifact.ant.VersionMapper"
          from="${dependency.versions}" to="flatten" />
</copy>
<copy todir="lib/src">
  <fileset refid="sources.dependency.fileset" />
  <mapper classpathref="maven-ant-tasks.classpath"
          classname="org.apache.maven.artifact.ant.VersionMapper"
          from="${dependency.versions}" to="flatten" />
</copy>
<copy todir="lib/javadoc">
  <fileset refid="javadoc.dependency.fileset" />
  <mapper classpathref="maven-ant-tasks.classpath"
          classname="org.apache.maven.artifact.ant.VersionMapper"
          from="${dependency.versions}" to="flatten" />
</copy>

注意:在上面的例子中你只需要通过声明typedef来指定classpathref="maven-ant-tasks.classpath"如果使用 Maven Ant 任务。如果 Maven Ant Tasks安装在 Ant 的lib目录中,则可以省略。

使用属性访问依赖项

(自 2.0.8 起)对于使用内联声明或 pom 引用解析的每个依赖项,定义属性groupId:artifactId:type[:classifier]指向相应的文件。例如,可以通过以下方式访问对 junit 的已解析依赖项:

<echo message="JUnit jar file downloaded to ${junit:junit:jar}"/>

关于系统范围的说明

使用系统范围的依赖项指定本地系统上的路径,该路径可能位于本地 maven 存储库之外。Ant 文件集只允许单个基目录,因此这些依赖项不会包含在已解析依赖项的生成文件集中。但是,它们将包含在路径对象中。

按范围过滤依赖项

有两个选项可用于按范围过滤 POM 依赖项:useScope属性和scopes属性。应该使用这些属性中的一个或另一个,但不能同时使用两者。

useScope属性遵循 Maven 的作用域行为约定。这意味着该属性可以设置为三个可能的范围之一:编译、运行时或测试。这些作用域的行为如下。

  • compile - 包括范围compilesystemprovided
  • runtime - 包括范围编译运行时
  • 测试- 包括范围系统提供编译运行时测试

例如,使用作用域runtime ,在作用域字段中使用compileruntime或 nothing (默认为compile)定义的任何依赖项都将包含在结果文件集中。

    <artifact:dependencies filesetId="deps.fileset" useScope="runtime">
      <pom file="mypom.xml"/>
    </artifact:dependencies>

(自 2.0.10 起)范围属性接受以逗号分隔的范围列表以包含在过滤中。只有具有这些特定范围的依赖项才会包含在生成的文件集中。如果未指定任何值,则包括所有范围。以下示例仅包括范围为providedtest的依赖项。

    <artifact:dependencies filesetId="deps.fileset" scopes="provided, test">
      <pom file="mypom.xml"/>
    </artifact:dependencies>

按类型过滤依赖项

可以使用type属性按类型过滤依赖项。这可以设置为要选择的类型的逗号分隔列表。以下示例将仅包含jar类型的工件。

    <artifact:dependencies filesetId="deps.fileset" type="jar">
      <pom file="mypom.xml"/>
    </artifact:dependencies>

默认情况下,构建依赖项列表时将包含所有工件类型。

使用依赖属性和引用生成 Ant 构建

(自 2.1.0 起)对于具有大型依赖树的项目,解决过程可能需要一些时间。在这些情况下,依赖项任务提供了一个选项来生成一个 Ant 构建文件(默认称为 build-dependencies.xml),该文件包含由依赖项解析生成的属性和引用。该文件可用作缓存以快速加载依赖项工件的路径。或者可以通过导入任务直接在其他 ant 构建文件中使用。

与此功能相关的依赖项任务有两个参数cacheDependencyRefsdependencyRefsBuildFile。第一个是一个布尔参数,表示是否应该生成构建文件。默认情况下,该文件将创建为“./target/build-dependencies.xml”。第二个参数允许更改默认文件名。

例如,要打开依赖缓存,可以使用以下配置。

    <artifact:dependencies cacheDependencyRefs="true">
      <pom file="mypom.xml"/>
    </artifact:dependencies>

第一次运行构建时,依赖项将从存储库中解析,任务将生成一个名为“build-dependencies.xml”的文件。此文件包含在构建期间生成的属性和文件集引用的列表。下次运行构建时,依赖引用将简单地从生成文件中加载。