2012-05-10 86 views
4

我在groovy中编写我的第一个自动化脚本,并且遇到了障碍。 同时利用该AntBuilder类的运行sshexec()我遇到了以下错误:我可以避免使用Grape在Groovy中加载模块吗?

: 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中,或者出现这种情况?

+1

的文物应user.home_dir/.m2目录/库缓存......本计划不运行的速度更快第二次呢? – sjr

+0

不幸的是,它在后续运行中运行速度很慢。似乎没有缓存,我的用户下也没有.m2目录。 Win机器上的路径是不同的? – Ryan

+1

回购仍在您的Windows主目录下。所有你需要的是你的类路径上的正确的罐子,他们如何到达那里并不重要。 –

回答

1

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

解决方法是将罐子放在%USERPROFILE%.groovy \ lib之下 - 之后不再需要葡萄调用。希望这对于有同样问题的其他人有用。

感谢Dave让我走上正轨。

+2

因为在运行其他脚本时可能需要不同的库或相同库的不同版本,所以我会对将它们放在整个环境中的位置保持谨慎。如果你真的*有限制使用Groovy文件(这是一个怪异的限制,btw!),你可能没有选项,但它可能会导致问题。 –

+1

好,这个想法是通过用一个包罗万象的groovy脚本替换.bat和ant .xml文件来清理当前的构建配置,但是替换ant sshexec调用并不适用于groovy。如果在本地安装库的方式更为简洁,而不是每次都在下载时下载:)尝试避免使用葡萄,因为它似乎使我认为应该成为一个简单的配置问题变得复杂。 – Ryan

+0

虽然每次都不应该下载它们。将罐子放在班级路径上(假设没有葡萄,我的意思是)就足够了。 –

0

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

+0

我正在使用的系统的一个限制是groovy脚本是唯一允许的文件。试图解决混乱。 – Ryan

2

使用葡萄注释在运行时下载脚本依赖关系:

@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 
相关问题