2

jsch-0.1.48.jar に依存する sshexec を使用しています。同じビルドスクリプトを使用したい他のユーザーは、そうする前に自分のマシンで構成を行う必要があるため、それを 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>

このターゲットは 1 回だけ実行する必要があります。その後、ANT sshexecタスクは開発者の PC で期待どおりに動作します。

アップデート

jar をダウンロードしたくない場合は、次のように、コマンド ラインから ANT ライブラリの場所を渡す別のメカニズムを使用します。

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

ANT ライブラリ管理の詳細については、ANT のマニュアルを参照してください。

于 2012-10-06T11:14:17.367 に答える