【问题标题】:Including Local Jars In Groovy在 Groovy 中包含本地罐子
【发布时间】:2018-04-12 22:12:32
【问题描述】:

我正在尝试在我的简单 Groovy 脚本中使用“HTTPBuilder”。当我使用“@Grab”导入依赖项时,一切正常。不过,我想将 jar 保存在不同的目录中并使用 classLoader 函数将其导入。我已经复制了 '@Grab' 放置到我的grapes 目录中的'http-builder-0.7.jar' 并将其粘贴到我的Groovy 脚本正在运行的同一目录中(在Windows 上)。然后我注释掉“@Grab”语句并包含 classLoader,但得到这个错误:

org.codehaus.groovy.control.MultipleCompilationErrorsException: 启动失败:C:\Groovy Scripts\test.groovy: 9: 无法解析 类 HTTPBuilder

任何想法为什么 classLoader 不能在脚本中工作?我在使用“@Grab”导入时打印出 jar 的路径,它肯定使用的是葡萄目录中的路径。如果我取消注释“@Grab”语句,它会再次起作用。这是小脚本...

//@Grab('org.codehaus.groovy.modules.http-builder:http-builder:0.7')

this.getClass().classLoader.rootLoader.addURL(new File("http-builder-0.7.jar").toURL())

//return new File(groovyx.net.http.HTTPBuilder.class.getProtectionDomain().getCodeSource().getLocation().toURI().getPath());

def http = new HTTPBuilder('http://httpbin.org/get')

【问题讨论】:

  • HttpBuilder 可能依赖于其他依赖...这是一个滑坡走下去
  • 有没有办法查看它所依赖的依赖项?这会像下载这些 jar 并将它们放在同一个目录中一样简单吗?
  • You can see them in the POM here 问题是,它是一棵依赖树,所以它所依赖的东西又会产生依赖......因此是滑坡。你最好使用 Grab,或者使用 gradle 之类的东西将你的脚本构建到一个胖 jar 中
  • 你试过把这个 jar 放在 groovy-root-folder/lib 上吗?

标签: java groovy


【解决方案1】:

如前所述,您最好使用其他方法,例如 Gradle 的 application plugin

但是,这是执行您所要求的一种方法。

首先,要获取 jar 和所有依赖项,请考虑以下 Gradle build.gradle 脚本:

apply plugin: 'java'

dependencies {
    compile 'org.codehaus.groovy.modules.http-builder:http-builder:0.7'
}

repositories { 
   jcenter()
}

clean {
    doLast {
        ant.delete(dir: 'runtime')
    }
}

task getDeps(type: Copy) {
    from sourceSets.main.runtimeClasspath
    into 'runtime/'

    doFirst {
        ant.delete(dir: 'runtime')
        ant.mkdir(dir: 'runtime')
    }
}

如果你运行gradle getDeps,它会将所有的jar 写入runtime

然后,在 Unix 终端(例如)中,您可以使用此设置类路径(使用 Java 6+ 中的通配符语法,并假设路径与上述 runtime 相同):

export CLASSPATH=.:"/user/foo/some/path/runtime/*"

在同一个终端中,这将起作用:

import groovyx.net.http.*

def http = new HTTPBuilder('http://httpbin.org/get')

println "Ready."

【讨论】:

    猜你喜欢
    • 2015-06-27
    • 2012-06-06
    • 1970-01-01
    • 1970-01-01
    • 2021-07-06
    • 2011-07-19
    • 2012-02-26
    • 1970-01-01
    • 2012-06-04
    相关资源
    最近更新 更多