下载后加载ant库
我正试图编写一个Ant脚本,从我们的存储库下载库(ivy和svnant),并将它们用作同一构建脚本中的taskdef。如果所有库都存在或全部丢失,则该方法有效,但如果需要辅助库(如svnClientAdapter),则会出现以下错误:下载后加载ant库,ant,download,classpath,taskdef,Ant,Download,Classpath,Taskdef,我正试图编写一个Ant脚本,从我们的存储库下载库(ivy和svnant),并将它们用作同一构建脚本中的taskdef。如果所有库都存在或全部丢失,则该方法有效,但如果需要辅助库(如svnClientAdapter),则会出现以下错误: jar:file:/home/reillym/.ant/lib/svnant.jar!/org/tigris/subversion/svnant/svnantlib.xml:5: taskdef A class needed by class org.tigris
jar:file:/home/reillym/.ant/lib/svnant.jar!/org/tigris/subversion/svnant/svnantlib.xml:5: taskdef A class needed by class org.tigris.subversion.svnant.SvnTask cannot be found: org/tigris/subversion/svnclientadapter/SVNClientException
换句话说,如果主库存在或不存在,一切都很好;但是如果主库存在,而其中一个依赖库不存在,那么我就会失败。如果没有其他更改,则第二次调用将成功
我尝试从一个任务和一个类调用检测/下载任务,结果相同。我的密码是:
<target name="svn-info" depends="load.subverion">
<svn><wcVersion path="${basedir}"/></svn>
</target>
<target name="load.subversion" depends="download.antlib-svn">
<taskdef resource="org/tigris/subversion/svnant/svnantlib.xml">
<!-- needed in case one of libraries was missing from ant's classpath -->
<classpath>
<pathelement location="${user.home}/.ant/lib/svnClientAdapter.jar"/>
<pathelement location="${user.home}/.ant/lib/svnant.jar"/>
<pathelement location="${user.home}/.ant/lib/svnjavahl.jar"/>
</classpath>
</taskdef>
<target name="download.antlib-svn" depends="retrieve.antlib-svn">
<!-- ant target="retrieve.antlib-svn" inheritAll="false"/ -->
</target>
<target name="retrieve.antlib-svn">
<get dest="${user.home}/.ant/lib/svnClientAdapter.jar" usetimestamp="1"
src="${url.ivyrepos}/antlib-svn/svnClientAdapter.jar"/>
<get dest="${user.home}/.ant/lib/svnant.jar" usetimestamp="1"
src="${url.ivyrepos}/antlib-svn/svnant.jar"/>
<get dest="${user.home}/.ant/lib/svnjavahl.jar" usetimestamp="1"
src="${url.ivyrepos}/antlib-svn/svnjavahl.jar"/>
</target>
如果只缺少svnant.jar,则一切正常。如果缺少svnClientAdapter.jar,则taskdef任务出现“未找到类”错误,并且在尝试使用该任务时出现“NoClassDefFoundError”错误,则此操作失败。如前所述,我尝试过将retrieve.antlib-svn目标称为依赖项、“ant”任务和“java”任务(使用fork)
这是Ant 1.7.0和Ubuntu10.10上的JDK1.6.011以及RedHat ELS6。为简洁起见,已删除检测/避免代码。启用调试后,工作调用和失败调用之间的唯一区别是缺少的jar包含在ant的类路径中,我尝试在taskdef任务中覆盖该类路径
我不介意生成一个新的顶级ant调用,但是ivy.project.invoked-targets在1.7.0中似乎不可用,而且我还没有找到另一种方法来使用相同的起始目标调用ant。它不会开箱即用:它与Java类加载器递归工作以及它们解决依赖关系这一事实有关,不是蚂蚁本身
我为你感到抱歉,我认为如果不自己开发一个Ant扩展,这是不可能实现的,我也不知道如何实现它。它不会开箱即用:它与Java类加载器递归工作这一事实有关,它们解决依赖关系,而不是Ant本身 我为你感到抱歉,我认为如果不开发一个Ant扩展,这是不可能实现的,我也不知道如何实现它