簡體   English   中英

創建具有依賴項的獨立 groovy 腳本

[英]Create a standalone groovy script with dependencies

我有一個依賴於 RestFB 的 Groovy 腳本:

<dependency>
  <groupId>com.restfb</groupId>
  <artifactId>restfb</artifactId>
  <version>2.0.0</version>
  <scope>runtime</scope>
</dependency>

我需要在另一台帶有groovy-shell 的機器上運行這個腳本。 當我現在這樣做時,我收到以下錯誤:

 @ line 7, column 1.
   import com.restfb.json.ParseException
   ^

1 error

我閱讀了構建 uber-jar 的方法,但從未找到一個很好的例子來展示如何做到這一點。 有關如何處理此解決方案的分步指南將非常有幫助。

Szymon Stepniak 的回答

我使用了@Grab ,起初在我的開發機器上運行良好。 當我切換到我的服務器時,會發生以下情況:

Caught: java.lang.NoClassDefFoundError: org/apache/ivy/core/report/ResolveReport
java.lang.NoClassDefFoundError: org/apache/ivy/core/report/ResolveReport
Caused by: java.lang.ClassNotFoundException: org.apache.ivy.core.report.ResolveReport

我知道我至少需要這種常春藤依賴:

<dependency>
  <groupId>org.apache.ivy</groupId>
  <artifactId>ivy</artifactId>
  <version>2.4.0</version>
</dependency>

但是我應該如何添加它以便腳本可以使用它?

如果在 Groovy 中編寫帶有依賴項的腳本,則不需要任何胖 jar。 Groovy 有一個稱為Grape的內置機制,它允許您將 maven 依賴項帶入您的腳本。 您所要做的就是在腳本的開頭使用@Grab('dependency_def')注釋,就是這樣:

腳本.groovy

@Grab('com.restfb:restfb:2.0.0')

import com.restfb.json.ParseException

// do your stuff

現在你可以運行你的腳本:

groovy script.groovy

首次運行總是需要更多時間,因為 Grape 會解析和下載依賴項。 下一次運行的執行速度快了幾倍,因為已經下載了依賴項。

帶有@Grab注釋的 Groovy 腳本也可以在 IDE 中輕松運行,例如 IntelliJ IDEA 有一個內置選項來抓取注釋並將它們添加到當前項目類路徑:將光標移動到@Grab注釋,按Alt + Enter並選擇Grab the artifacts選項。

參考: 使用 Grape 進行依賴管理

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM