我有一个Groovy项目(使用Eclipse),它使用了几个@Grab
语句。这在我的开发机器上运行良好。然而,我需要将这个应用程序(包括它的所有依赖项)分发给其他没有任何互联网连接的机器,也就是说,不可能从这些机器下载必要的JAR。
有没有一种方法可以自动将依赖项包含到项目中,例如lib
文件夹?通过这种方式,我可以将项目复制到另一台机器上并使用它。
例如,假设您有一个类似的脚本Script.groovy
,您当前使用groovy Script.groovy
:运行
@Grab('com.github.groovy-wslite:groovy-wslite:1.1.2')
import wslite.rest.*
def client = new RESTClient("http://httpbin.org")
def response = client.get(path:'/get')
assert 200 == response.statusCode
println "Received : $response.json"
现在,我们想把它放入一个可以分发的jar文件中,人们只需使用java -jar myApp.jar
即可运行
因此,制作以下文件夹结构:
myApp
|-- src
| |-- main
| |-- groovy
| |-- example
| |-- Script.groovy
|-- build.gradle
然后,在Script.groovy
中,放入脚本(带有包名,没有@Grab
注释):
package example
import wslite.rest.*
def client = new RESTClient("http://httpbin.org")
def response = client.get(path:'/get')
assert 200 == response.statusCode
println "Received : $response.json"
在build.gradle
中,放入这个脚本,它下拉groovy
和groovy-wslite
依赖项,并应用shadow-jar插件将所有依赖项捆绑到一个单独的胖jar中:
plugins {
id "com.github.johnrengelman.shadow" version "1.2.2"
}
apply plugin: 'groovy'
apply plugin: 'application'
repositories {
jcenter()
}
mainClassName = 'example.Script'
dependencies {
compile 'org.codehaus.groovy:groovy-all:2.4.5'
compile 'com.github.groovy-wslite:groovy-wslite:1.1.2'
}
然后你可以(假设你已经安装了Gradle),只需运行:
gradle shadowJar
它将编译您的代码,并将其及其所有依赖项放入build/libs/myApp-all.jar
那么,你就可以运行:
java -jar build/libs/myApp-all.jar
你的脚本应该像以前一样运行。。。
然后,您可以分发这个jar文件,而不仅仅是脚本。。。
希望这能帮助
我建议切换到Gradle或其他一些在构建时下载依赖项的构建工具。您可能已经知道,grape在运行时会删除所有依赖项。
Grape(GroovyAdaptable Packaging Engine或GroovyAdvanced Packaging Engine)是在Groovy中启用grab()调用的基础设施,这是一组利用Ivy为Groovy提供存储库驱动模块系统的类。这允许开发人员编写一个基本上具有任意库需求的脚本,并只发送该脚本。Grape将在运行时根据需要下载并链接命名库和所有依赖项,当脚本从现有存储库(如Ibiblio、Codehaus和java.net)运行时,这些库和依赖项形成一个可传递的闭包。
这个链接可能有助于您在Groovy脚本中使用Gradle。
从Gradle 运行Groovy脚本
您可以将Grape repo复制到目标部署服务器。应该是~/.grooovy/Grape。然后你可以像
两种解决方案
用gradle替换整个构建进度,就像@tim_yates的回答中提到的那样。
使用
grape install
命令将包预安装到grape本地repo中,默认路径为"~/.grooovy/grapes"。然后将脚本和grape目录打包在一起。您可以将葡萄回购目录切换到您喜欢的位置。参见第3.5节http://docs.groovy-lang.org/latest/html/documentation/grape.html