有没有办法从build.xml中指定本地jsch.jar的位置?

Tom*_*asz 8 java ant scp

build.xml包含<scp><sshexec>任务,所以我在build.xml中提供了jsch.jar和其他库在同一目录中.

以下taskdef:

<taskdef name="scp"
    classname="org.apache.tools.ant.taskdefs.optional.ssh.Scp"
    classpath="WebContent/WEB-INF/lib/jsch-0.1.43.jar" />
Run Code Online (Sandbox Code Playgroud)

抛出错误

A class needed by class org.apache.tools.ant.taskdefs.optional.ssh.Scp
cannot be found: com/jcraft/jsch/UserInfo
Run Code Online (Sandbox Code Playgroud)

我无法修改标准的Ant安装(例如将jsch.jar放在ant lib目录中,或删除ant-jsch.jar),或添加命令行标志,或修改系统环境变量等:脚本必须默认运行Ant在不同的系统上.

我实际上是在重新提出这里最初提出的问题:http: //ant.1045680.n5.nabble.com/specifying-location-of-an-external-library-within-build-xml-td1344969.html

但是无法得到关于classloader工作的答案.

igo*_*gor 17

最后,我找到了一个有效的解决方案(至少对Ant 1.7.1).首先你必须删除ant-jsch.jar,ANT_HOME/lib因为Ant抱怨它并感到困惑.然后从项目本身加载库:

<available property="ant-jsch.present" file="${ant.home}/lib/ant-jsch.jar"/>
<fail if="ant-jsch.present" message="Please remove ant-jsch.jar from ANT_HOME/lib see [http://ant.apache.org/faq.html#delegating-classloader]"/>

<path id="jsch.path">
    <pathelement location="lib/ant-jsch.jar" />
    <pathelement location="lib/jsch-0.1.44.jar" />
</path>

<taskdef name="scp" classname="org.apache.tools.ant.taskdefs.optional.ssh.Scp" classpathref="jsch.path" />
<taskdef name="sshexec" classname="org.apache.tools.ant.taskdefs.optional.ssh.SSHExec" classpathref="jsch.path" />
Run Code Online (Sandbox Code Playgroud)