Ant的SCP任务无法运行,即使在ant/lib中使用了jsch。

18
我需要通过scp复制一个war文件。
我已经将jsch-0.1.42.jar添加到$ANT_HOME/lib,但仍然出现以下错误:
Cause: the class org.apache.tools.ant.taskdefs.optional.ssh.Scp was not found. This looks like one of Ant's optional components.
这是运行ant -diagnostics的结果,仅供参考: http://gist.github.com/320859

你的类路径上有两个jsch,请选择一个jsch-0.1.29.jar(153401字节)jsch-0.1.42.jar(185746字节)。 - user177800
是的,它与它们都不兼容。 - Pablo Fernandez
4个回答

15
我也遇到了同样的问题并解决了!请记住,您需要在ant lib目录下同时拥有ant-jsch.jar(从ant或java安装中获取的原生库)和更新的jsch(在我的情况下是jsch-0.1.46.jar)。
您需要从http://www.jcraft.com/jsch/加载最新的jsch.jar并将其添加到libs文件夹中(但不要替换ant-jsch.jar)。
很多开发人员常见的错误包括:
  1. ant-jsch.jar过时了(在这种情况下,对于ant来说<scp>任务是未知的)
  2. 调整库版本,使得ant-jsch.jarjsch兼容。
  3. jsch在ant lib目录中不存在或者过时
  4. jsch替换原生的ant-jsch.jar(我就是这样做的...)
在最后两种情况下,ant知道scp命令,但却显示它不可用。

如果事情仍然不起作用,就像发生在我身上的那样,请注意可能存在版本不兼容的问题。升级ant,确保ant-jsch存在,并升级jsch到最新版本。 - dgorur
使用mvn antrun:run时没有帮助。尝试同时使用ant-jsch-1.9.2和jsch-0.1.54,但会出现错误。 - zygimantus

14

从诊断结果来看,这似乎是你的问题:

可选任务:不可用

你的 $ANT_HOME/lib 目录中缺少 ant-jsch.jar 文件,这就是缺失类的来源。

我不确定这是怎么发生的 - 我总是从下载站点下载ZIP文件安装Ant,其中包括所有可选任务。如果你是从Linux软件包中安装的 Ant,请尝试查看是否有单独的软件包提供了可选任务。

一旦你安装了可选任务,可以像 @trashgod 建议的那样删除旧版本的jsch.jar文件。


4
如果您使用的是MacOSX Lion 10.7+附带的'ant',它将不会包含ant-jsch.jar。为了解决这个问题,您需要下载官方的ant并将ant-jsch.jar与jsch.jar一起复制到您的~/.ant/lib/目录下。 - Gabe Martin-Dempesy

0

我在 Maven 的 pom.xml 文件中添加了 ant-jsch 和 jsch 两个依赖项,或者将这两个 JAR 包包含在构建中都可以解决此问题。


0
执行以下命令:
 sudo yum install ant-jsch.noarch

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接