我有一个带有单个 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
提交
取消