【问题标题】:How do I load optional task sshexec into Ant in a no-configuration manner?如何以无配置方式将可选任务 sshexec 加载到 Ant 中?
【发布时间】:2012-09-26 22:57:20
【问题描述】:

我使用的是 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

【问题讨论】:

    标签: java ant ssh jsch


    【解决方案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 manual

    【讨论】:

      【解决方案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>
      

      【讨论】:

      • 签入二进制 (jar) 文件通常是个坏主意……事情很快就会失控,尤其是使用 DVCS。最好按照@Mark O'Conner 指定的方式使用 ivy 或 http 来获取它。
      猜你喜欢
      • 2012-10-16
      • 1970-01-01
      • 2010-12-05
      • 1970-01-01
      • 1970-01-01
      • 2010-10-03
      • 1970-01-01
      • 2020-12-18
      • 1970-01-01
      相关资源
      最近更新 更多