在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>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值