繁体   English   中英

Groovy:@Grab包含与classpath包含有什么不同?

[英]Groovy: How does @Grab inclusion differ from classpath inclusion?

1.一般来说,@ Grape / @ Grab的包含与classpath包含有什么不同?

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失败了

捕获:org.xmlpull.v1.XmlPullParserException:由: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')

而不是你现在拥有的一条线

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM