簡體   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