禁用Groovy grapes的自动下载

禁用Groovy grapes的自动下载,groovy,grape,Groovy,Grape,示例脚本ss.groovy: @Grab(group='org.codehaus.groovy.modules.http-builder', module='http-builder', version='0.5.0') import groovyx.net.http.HTTPBuilder println('done') 由于某些原因,使用运行时需要约25秒才能加载 groovy ss.groovy groovy -Dgroovy.grape.autoDown

示例脚本ss.groovy:

@Grab(group='org.codehaus.groovy.modules.http-builder', 
      module='http-builder', 
      version='0.5.0')
import groovyx.net.http.HTTPBuilder

println('done')
由于某些原因,使用运行时需要约25秒才能加载

groovy ss.groovy
groovy -Dgroovy.grape.autoDownload=false ss.groovy
在使用时运行约5秒

groovy ss.groovy
groovy -Dgroovy.grape.autoDownload=false ss.groovy
根据。我试着用

Grape.enableAutoDownload = false
Grape.grab(group:'org.codehaus.groovy.modules.http-builder', 
           module:'http-builder',
           version:'0.5.0')
import groovyx.net.http.HTTPBuilder
println('done')
但这在导入时失败,原因是:

/tmp/ss.groovy: 3: unable to resolve class groovyx.net.http.HTTPBuilder
 @ line 3, column 1.
  import groovyx.net.http.HTTPBuilder
  ^
是否有一个包含的方法来:

  • 使其不会自动下载工件(首选,因为它允许解决其他问题,例如,当工件已经存在于本地缓存中时,外部站点关闭)
  • 以任何其他方式加快启动速度

所谓包含,我的意思是,所有附加指令都应该在脚本中,或者,如果不存在这样的指令,则应该在一些groovy配置文件(例如~/.groovy/grapeConfig.xml或类似文件)中放入一个可接受的默认值(例如,不要检查缓存的工件是否有更新-但是,我仍然希望全局自动下载).

为什么不在本地安装存储库管理器

我使用Nexus代理和缓存所有第三方存储库。Groovy被配置为从其本地缓存或Nexus检索:

<ivysettings>
  <settings defaultResolver="downloadGrapes"/>
  <resolvers>
    <chain name="downloadGrapes">
      <filesystem name="cachedGrapes">
        <ivy pattern="${user.home}/.groovy/grapes/[organisation]/[module]/ivy-[revision].xml"/>
        <artifact pattern="${user.home}/.groovy/grapes/[organisation]/[module]/[type]s/[artifact]-[revision].[ext]"/>
      </filesystem>
      <!-- Local Nexus Repository -->
      <ibiblio name="nexus" root="http://localhost:8081/nexus/repositories/public" m2compatible="true"/>
    </chain>
  </resolvers>
</ivysettings>


这在当前(Groovy 1.8.1)实现中似乎不可能实现。我创建了一个改进通知单:。

更新:问题已经解决,
@GrabConfig(autoDownload=false)
将在Groovy 2.2中提供。谢谢,这可能是一个临时解决方案,但是不够便携-在某些地方安装不是一个选项。