我可以避免使用Grape在Groovy中加载模块吗?

时间:2012-05-10 15:05:23

标签: java maven groovy grape

我在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中还是有什么效果?

3 个答案:

答案 0 :(得分: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 可用于控制葡萄是否进行远程下载或仅使用其缓存文件。

groovy -Dgroovy.grape.autoDownload=false myscript.groovy

答案 1 :(得分:1)

将所需的罐子添加到%ANT_HOME%和%GROOVY_HOME%不起作用。

解决方案是将jar放在%USERPROFILE%。groovy \ lib下 - 之后不再需要Grape调用。希望这对有同样问题的其他人有用。

感谢Dave让我走上正轨。

答案 2 :(得分:0)

假设您只在几台机器上运行代码,我会创建一个grapeConfig.xml文件并将ivy.cache.ttl.default设置为30天。这将告诉Grape,如果您有依赖项,该依赖项使用版本范围仅每30天检查一次远程存储库以获取更新的依赖项。有关详细信息,请参阅this post