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

我使用的是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
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上按预期工作.

更新

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

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

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

https://stackoverflow.com/questions/12752124/how-do-i-load-optional-task-sshexec-into-ant-in-a-no-configuration-manner

转载注明原文:java – 如何以无配置方式将可选任务sshexec加载到Ant中?