【发布时间】:2010-10-15 17:53:38
【问题描述】:
我在自定义 Ant 任务中使用 classpath 属性来告诉 Ant 在哪里可以找到外部任务 jar,但是对于内置任务我该如何做呢?
在我的情况下,我想确保 ant 使用我的 jsch.jar 副本来执行 scp 任务,而不是我已经安装在系统上的那个。有什么办法可以<scp> 同时保证它使用我的jsch.jar?
【问题讨论】:
我在自定义 Ant 任务中使用 classpath 属性来告诉 Ant 在哪里可以找到外部任务 jar,但是对于内置任务我该如何做呢?
在我的情况下,我想确保 ant 使用我的 jsch.jar 副本来执行 scp 任务,而不是我已经安装在系统上的那个。有什么办法可以<scp> 同时保证它使用我的jsch.jar?
【问题讨论】:
如果您的 ant 调用使用 $ANT_HOME,您可以只为该 ant 调用使用特殊的 ANT_HOME 值到自定义 ant 安装,确保您的 $ANT_HOME/lib 包含 ant-jsch.jar 的正确副本。
请参阅此SO question 了解更多信息。
【讨论】:
我认为最好的方法是定义自己的任务,而不是搞乱预定义的任务。
<taskdef name="myscp" class="..." classpath="jsch.jar"/>
<myscp .../>
【讨论】:
<myscp> 任务的主体会发生什么。
我遇到了完全相同的问题,这就是我所做的:使用 Google 的 Jar Jar 更改包名称。 这是我使用的 build.xml:
<project name="Admin WAS Jython" default="jar">
<target name="jar" >
<taskdef name="jarjar" classname="com.tonicsystems.jarjar.JarJarTask"
classpath="jarjar-1.0.jar"/>
<jarjar jarfile="dist/ant-jsch-copy.jar">
<zipfileset src="ant-jsch.jar"/>
<rule pattern="org.apache.tools.ant.taskdefs.optional.ssh.**" result="org.apache.tools.ant.taskdefs.optional.ssh.copy.@1"/>
</jarjar>
</target>
然后在您的 ant 项目中使用以下内容:
<taskdef name="scp2"
classname="org.apache.tools.ant.taskdefs.optional.ssh.copy.Scp"
classpath="ant-jsch-copy.jar;jsch-0.1.43.jar"/>
并使用 scp2 任务而不是 scp
【讨论】: