如何以无配置方式将可选任务sshexec加载到Ant中?

时间:2012-10-05 18:36:28

标签: java ant ssh jsch

我使用的是sshexec,它取决于jsch-0.1.48.jar。我不能把它放到ant / lib目录中,因为其他希望使用相同构建脚本的用户必须先在他们的机器上进行配置才能这样做。

我想要做的是能够引用jsch-0.1.48.jar作为项目的一部分。目前,我将它放在project / libs目录中,我正在尝试类似:

<property name="lib" location="lib"/>

<taskdef name="sshexec" classname="org.apache.tools.ant.taskdefs.optional.ssh.SSHExec">
  <classpath>
    <pathelement location="${lib}/jsch-0.1.48.jar"/>  
  </classpath>
</taskdef> 

<target name="sshcmd" description="ssh command">    
    <sshexec host="X.X.X.X" username="USER" password="PASS" command="cmd" trust="true"/>
</target>

但那不起作用:

C:\dev\trunk\project:>ant sshcmd
Buildfile: C:\dev\trunk\project\build.xml

BUILD FAILED
C:\dev\trunk\project\build.xml:275: taskdef A class needed by class org.apache.tools.ant.taskdefs.optional.ssh.SSHExec cannot be found: com/jcraft/jsch/Logger
using the classloader AntClassLoader[C:\dev\trunk\project\lib\jsch-0.1.48.jar]

Total time: 0 seconds

2 个答案:

答案 0 :(得分:1)

sshexec任务内置于ANT中,您无需调用taskdef操作即可使用它。所有缺少的是jsch jar。

这可以使用bootstrap目标安装,如下所示(来自Maven Central):

<target name="bootstrap" description="Install missing jars">
    <mkdir dir="${user.home}/.ant/lib"/>
    <get src="http://search.maven.org/remotecontent?filepath=com/jcraft/jsch/0.1.48/jsch-0.1.48.jar" dest="${user.home}/.ant/lib/jsch.jar"/>
</target>

此目标只需运行一次,之后ANT sshexec任务将在开发人员的PC上按预期工作。

更新

如果您不想下载其他机制来从命令行传递ANT库的位置,如下所示:

ant -lib /path/to/project/lib/dir ...

有关ANT库管理的更多详细信息,我建议您参考ANT manual

答案 1 :(得分:-2)

jsch jar与我的项目打包在一起。所以我没有下载它,而是将它复制到ant库中。构建将在第一次运行时失败,这对我的目的来说很好。它将第二次成功,因为jar将在库中并在开始时加载。

<target name="jschset" description="Set the jar">   
    <copy file="${lib}/jsch-0.1.48.jar" tofile="${ant.home}/lib/jsch-0.1.48.jar"/>
</target>