在ant脚本中使用maven管理的dependency

这几天总是有朋友问我如何在ant脚本中引用maven管理的dependency,就在这里写一下,方便查找

maven提供了一些有用的ant-task与ant集成,用于在ant中方便的处理maven管理的artifact,其中包括了dependency管理,POM处理等等。这些task都被打包在maven-ant-tasks-<version>.jar中。

首先,在ant脚本中引入maven的ant task有两种方法,其中之一是把maven-ant-task引入ant中,你需要做的是把maven-ant-tasks-<version>.jar放到ant的lib里,并加入CLASSPATH环境变量(或者在运行ant时使用-lib参数)。使用这种方法时,需要在pom中加入以下namespace声明
<project ... xmlns:artifact="antlib:org.apache.maven.artifact.ant">
...
</project>

这种方法平时用的较少,因为你必须为在不同的机器上使用ant task额外的处理maven-ant-tasks-<version>.jar的路径引用

另外一种方法是声明typedef来引入maven ant task,这种方法的最大好处是maven-ant-tasks-<version>.jar的位置可以随意,通常我们会把这个包放在版本控制中,这样team里所有人都能够很方便的拿到并且不需要为不同的机器做额外的配置。

maven 官网给出的例子如下

<project ... xmlns:artifact="urn:maven-artifact-ant">
...
<path id="maven-ant-tasks.classpath"
<!-- antlib路径 -->
path="lib/maven-ant-tasks-2.0.9.jar" />
<typedef resource="org/apache/maven/artifact/ant/antlib.xml"
uri="urn:maven-artifact-ant"
classpathref="maven-ant-tasks.classpath" />
...
</project>

注意这种方式的namespace声明与上一种方式的区别

这时候就可以用dependencies task来处理maven管理的dependency了


<artifact:dependencies
pathId="dependency.classpath"
filesetId="dependency.fileset"
...
>


之后,在ant脚本中就可以用下面的方式引用项目dependency
  ...
<fileset refid="dependency.fileset" />
<classpath refid="dependency.classpath" />
...


一个完整的例子:


<project name="testproject" default="" basedir="." xmlns:artifact="urn:maven-artifact-ant">

<property environment="env" />
<property name="work.src" value="${basedir}/src/main/java" />
<property name="work.conf" value="${basedir}/src/main/resources" />
<property name="work.classes" value="${basedir}/target/classes" />

<target name="maven-jar" description="Use Maven2 to manage jars' dependencies">
<typedef resource="org/apache/maven/artifact/ant/antlib.xml" uri="urn:maven-artifact-ant">
<classpath>
<pathelement location="lib/maven-ant-tasks-2.0.7.jar" />
</classpath>
</typedef>

<artifact:pom file="pom.xml" id="testproject.pom" />

<artifact:dependencies pathId="testproject.maven.classpath" filesetId="testproject.fileset" usescope="runtime">
<pom refid="testproject.pom" />
</artifact:dependencies>
</target>

<path id="project.classpath">
<dirset dir="${work.conf}" />
<fileset refid="testproject.fileset" />
</path>

<target name="compile" depends="maven-jar" description="compiles all source files">
<javac srcdir="${work.src}" destdir="${work.classes}" classpathref="project.class.path" debug="true">
</javac>
</target>

</project>
阅读更多
想对作者说点什么?

博主推荐

换一批

没有更多推荐了,返回首页