Groovy:@Grab 包含与类路径包含有何不同?

标签 groovy dependencies classpath groovy-grape

1。一般来说,@Grape/@Grab 包含与类路径包含有何不同?

2。具体来说,什么可能导致以下行为差异?

我对 xpp3 有一个要求,我表示为:

// TestScript.groovy
@Grab(group='xpp3', module='xpp3', version='1.1.3.4.O')
import org.xmlpull.v1.XmlPullParserFactory;
println "Created: " + XmlPullParserFactory.newInstance()

运行 $ groovy TestScript.groovy 失败,并显示

Caught: org.xmlpull.v1.XmlPullParserException: caused by: org.xmlpull.v1.XmlPullParserException:

但是,如果我手动将 Grape 获取的 .jar 添加到我的 Groovy 类路径:

$ groovy -cp ~/.groovy/grapes/xpp3/xpp3/jars/xpp3-1.1.3.4.O.jar \
         TestScript.groovy 

...然后一切正常。

最佳答案

Grab 使用 ivy 从 Maven 核心存储库获取指定的库(及其所有依赖项)。然后,它将这些下载的库添加到运行当前脚本的加载器的类路径中。

将 jar 添加到类路径只是将指定的 jar 添加到系统类路径。

由于此示例中没有依赖项,因此可能需要系统类加载器加载该库。

要检查这一点,请尝试添加

@GrabConfig(systemClassLoader= true)
@Grab(group='xpp3', module='xpp3', version='1.1.3.4.O')

而不是您目前拥有的单线 Grab

关于Groovy:@Grab 包含与类路径包含有何不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20009993/

相关文章:

Jenkins 工作 DSL : Using parameters in groovyScript in job step

c++ - 比可转换类型的循环依赖更好的设计

eclipse - 如何将JAR库添加到WAR项目而不面临java.lang.ClassNotFoundException?类路径 vs 构建路径 vs/WEB-INF/lib

java - eclipse EE juno : java.net.bind 异常

bash - Jenkins 为所有作业删除早于最新 20 个构建的构建

jquery - 如何在 Play 中的 groovy 模板中使用 jQuery 模板?

java - 在 java/groovy 中拆分出非常大的枚举

hadoop - Oozie + Sqoop : JDBC Driver Jar Location

Makefile 依赖项不适用于虚假目标

classpath - 在 Play Framework 应用程序中设置类路径顺序