Java 我可以避免在Groovy中使用Grape加载模块吗?
我正在用groovy编写我的第一个自动化脚本,我遇到了一个障碍。 在使用AntBuilder类运行sshexec()时,我遇到以下错误:Java 我可以避免在Groovy中使用Grape加载模块吗?,java,maven,groovy,grape,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 compone
: 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_路径或类似的方式?假设您只需要在几台机器上运行代码,我会创建一个grapeConfig.xml文件,并将ivy.cache.ttl.default设置为30天左右。这将告诉Grape,如果您有一个依赖项,它使用一个版本范围,每30天只检查一次远程存储库中更新的依赖项。有关更多详细信息,请参阅。在运行时使用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
将所需JAR添加到%ANT_HOME%和%GROOVY_HOME%无法工作 解决方案是将jar放在%USERPROFILE%.groovy\lib下,之后就不再需要Grape调用了。希望这对其他有同样问题的人有用 谢谢你让我走上正轨
- 请参阅“向类路径添加内容”标题
echo%classpath%
时,它引用了一个特定的jar文件。我应该把下载的jar放在和这个相同的文件夹中吗?不,类路径包含Java应用程序可用的所有jar文件和类目录的列表。