我有一個帶有單個 java 庫依賴項的簡單 groovy 腳本:package com.mrhacki.myAppimport me.tongfei.progressbar.ProgressBar class Loading { static void main(String[] arguments) { List list = ["file1", "file2", "file3"] for (String x : ProgressBar.wrap(list, "TaskName")) { println(x) } } }我正在使用 gradle 來管理項目的依賴項。該項目的 gradle 配置也非常簡單:plugins { id 'groovy'}group 'com.mrhacki'version '1.0-SNAPSHOT'repositories { mavenCentral()}dependencies { compile 'org.codehaus.groovy:groovy-all:2.3.11' compile 'me.tongfei:progressbar:0.7.2'} 如果我從 Intellij IDE 運行腳本,腳本會按預期執行。我現在想做的是將具有這種依賴關系的腳本編譯成一個 .jar 文件,這樣我就可以這樣分發它,并從任何文件系統路徑運行應用程序,因為腳本邏輯將依賴于執行被調用。我已經嘗試了一些 gradle fat jars 示例,但沒有一個對我有用,因為 .jar 文件Could not find or load main class Loading在我嘗試運行時不斷拋出。如果有人愿意提供提示或展示一個 gradle 任務的示例,該任務將執行符合我描述的需求的構建,我將非常感激。我也知道帶有@Grab注釋的 groovy 模塊 Grape,但我將其作為最后的手段,因為我不希望用戶等待依賴項下載,并希望將它們與應用程序捆綁在一起。我在項目中使用 groovy 2.5.6 和 gradle 4.10
1 回答

繁華開滿天機
TA貢獻1816條經驗 獲得超4個贊
您可以使用Task簡單地自己創建fat-jar,無需任何額外的插件。jar對于像您這樣的簡單/小型項目,它應該很簡單:
jar {
manifest {
// required attribute "Main-Class"
attributes "Main-Class": "com.mrhacki.myApp.Loading"
}
// collect (and unzip) dependencies into the fat jar
from {
configurations.compile.collect {
it.isDirectory() ? it : zipTree(it)
}
}
}
編輯:請考慮其他意見:如果您有多個外部庫,您可能對此解決方案有疑問,因此在這種情況下,您應該使用“影子”插件尋求解決方案。
添加回答
舉報
0/150
提交
取消