我有一个Groovy脚本,它依赖于RestFB:
<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
我读到了关于构建超级jar的方法,但从未找到一个展示如何做到这一点的好例子。有关如何处理此解决方案的分步指南将非常有用。
我使用@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>
但是我应该如何添加它以便脚本可以使用它?
答案 0 :(得分:1)
如果涉及到具有依赖关系的Groovy脚本,你就不需要任何胖jar。 Groovy有一个名为Grape的内置机制,允许您将maven依赖项添加到脚本中。您所要做的就是在脚本的开头使用@Grab('dependency_def')
注释,并且它是:
script.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 + 输入并选择Grab the artifacts
选项。