4

Groovy で初めての自動化スクリプトを作成していますが、障害にぶつかりました。AntBuilder クラスを使用して sshexec() を実行しているときに、次のエラーが発生しました。

: Problem: failed to create task or type sshexec
Cause: the class org.apache.tools.ant.taskdefs.optional.ssh.SSHExec was not found.
    This looks like one of Ant's optional components.
Action: Check that the appropriate optional JAR exists in
    -ANT_HOME\lib
    -the IDE Ant configuration dialogs

Do not panic, this is a common problem.
The commonest cause is a missing JAR.

This is not a bug; it is a configuration problem

これまでのところ、これに対して私が見つけた最良の解決策は、使用することです

Grape.grab(group : "com.jcraft", module : "jsch", classLoader : this.class.classLoader.rootLoader)
Grape.grab(group:"ant", module:"ant-jsch", classLoader:this.class.classLoader.rootLoader)

必要なモジュールをロードするため。ただし、Grape がリモートの Maven リポジトリから jar をダウンロードする際のラグ タイムをなくしたいと考えています。

おそらくJAVA_PATHなどに、将来使用するためにモジュールをダウンロードして保存する方法はありますか?

4

3 に答える 3

2

Grapeアノテーションを使用して、実行時にスクリプトの依存関係をダウンロードします。

@Grapes([
    @Grab(group='org.apache.ant', module='ant-jsch', version='1.8.3'),
    @GrabConfig(systemClassLoader=true)
])

def ant = new AntBuilder()

ant.sshexec(host:"somehost", username:"yo", password:"dude", command:"ls")

ファイアウォールの背後にいる場合は、Mavenリポジトリの場所を構成することもできます。

@GrabResolver(name="my-repo", root="http://my.hostname/maven/repo")

最後のヒントとして、プロパティgroovy.grape.autoDownloadを使用して、grapeがリモートダウンロードを実行するか、キャッシュされたファイルのみを使用するかを制御できます。

groovy -Dgroovy.grape.autoDownload=false myscript.groovy
于 2012-05-10T22:02:45.597 に答える
1

必要な jar を %ANT_HOME% および %GROOVY_HOME% に追加しても機能しませんでした。

解決策は、jar を %USERPROFILE%.groovy\lib の下に置くことです。その後、Grape 呼び出しは不要になります。これが同じ問題を抱えている他の人に役立つことを願っています。

私を正しい軌道に乗せてくれたデイブに感謝します。

于 2012-05-11T13:16:56.150 に答える
0

数台のマシンでコードを実行するだけだと仮定すると、geepConfig.xml ファイルを作成し、ivy.cache.ttl.default を 30 日程度に設定します。これにより、バージョン範囲を使用する依存関係がある場合に、30 日ごとに更新された依存関係についてのみリモート リポジトリをチェックすることが Grape に通知されます。詳細については、この投稿を参照してください。

于 2012-05-10T17:10:31.110 に答える