为了账号安全,请及时绑定邮箱和手机立即绑定

使用 gradle 管理的所有依赖项编译一个 groovy 脚本,然后通过命令行将其作为独立应用程序

使用 gradle 管理的所有依赖项编译一个 groovy 脚本,然后通过命令行将其作为独立应用程序

喵喵时光机 2022-07-06 09:48:25
我有一个带有单个 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) 

        }

    }

}

编辑:请考虑其他意见:如果您有多个外部库,您可能对此解决方案有疑问,因此在这种情况下,您应该使用“影子”插件寻求解决方案。


查看完整回答
反对 回复 2022-07-06
  • 1 回答
  • 0 关注
  • 88 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号