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