2

我正在使用 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
4

2 回答 2

1

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

这可以使用引导目标安装,如下所示(来自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 上按预期运行。

更新

如果您不想下载 jars,另一种机制可以从命令行传递 ANT 库的位置,如下所示:

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

有关 ANT 库管理的更多详细信息,请参阅ANT 手册

于 2012-10-06T11:14:17.367 回答
-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>
于 2012-10-08T14:51:11.350 回答