我有一个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"
Run Code Online (Sandbox Code Playgroud)
现在,我们希望将其放入一个可以分发的jar文件中,人们可以通过 java -jar myApp.jar
因此,请创建以下文件夹结构:
myApp
|-- src
| |-- main
| |-- groovy
| |-- example
| |-- Script.groovy
|-- build.gradle
Run Code Online (Sandbox Code Playgroud)
然后,在中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"
Run Code Online (Sandbox Code Playgroud)
然后在中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'
}
Run Code Online (Sandbox Code Playgroud)
然后,您可以(假设您已经安装了Gradle),只需运行:
gradle shadowJar
Run Code Online (Sandbox Code Playgroud)
它将编译您的代码,并将其及其所有依赖项放入 build/libs/myApp-all.jar
因此,您可以运行:
java -jar build/libs/myApp-all.jar
Run Code Online (Sandbox Code Playgroud)
您的脚本应该像以前一样运行...
然后,您可以分发此jar文件,而不仅仅是脚本...
希望这可以帮助
| 归档时间: |
|
| 查看次数: |
3384 次 |
| 最近记录: |