如何解决下载后加载ant库
| 我正在尝试编写一个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.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)。
这是在Ubuntu 10.10和RedHat ELS6上具有JDK 1.6.0_11的Ant 1.7.0。为简洁起见,删除了检测/避免代码。启用调试后,工作调用与失败之间的唯一区别是ant的类路径中包含缺少的jar,我尝试在taskdef任务中覆盖它。
我不介意产生一个新的顶级ant调用,但是ivy.project.invoked-targets在1.7.0中似乎不可用,而且我还没有想出另一种方法来调用具有相同起始目标的ant 。
解决方法
它不是开箱即用的:它与Java类加载器以递归方式工作并且它们解析依赖关系(而不是Ant本身)有关。
我为您感到抱歉,如果不开发自己的Ant扩展程序,这是无法实现的,并且我对如何做到这一点一无所知。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。