猿问

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

我有一个带有单个 java 库依赖项的简单 groovy 脚本:


package com.mrhacki.myApp


import 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


喵喵时光机
浏览 89回答 1
1回答

繁华开满天机

您可以使用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)         }    }}编辑:请考虑其他意见:如果您有多个外部库,您可能对此解决方案有疑问,因此在这种情况下,您应该使用“影子”插件寻求解决方案。
随时随地看视频慕课网APP

相关分类

Java
我要回答