从settings.gradle创建具有依赖项的Jar文件

but5z9lq  于 2022-12-13  发布在  其他
关注(0)|答案(2)|浏览(166)

bounty已结束。回答此问题可获得+50的声望奖励。奖励宽限期将在20小时后结束。lamrongol希望吸引更多人关注此问题:现在,Gradle不仅生成build.gradle,还生成settings.gradle。但是,在任何页面中都没有说明如何根据settings.gradle上的信息构建jar文件。

我想创建一个jar文件,可供java -cp .\TrendAnalyzer.jar trend_detect.Main等命令使用。但是,我无法从settings.gradle而不是build.gradle创建jar文件。如何创建一个包含依赖项的jar文件,该文件包含include等信息。

voj3qocg

voj3qocg1#

将com.github.johnrengelman.shadow插件添加到主模块build.jar

plugins {
    // *snip*
    id 'com.github.johnrengelman.shadow' version '7.1.2'
}

application {
    // Define the main class for the application.
    mainClass = 'jaso92559.app.App'
}

jar {
    manifest {
        // Define the main class for the application.
        attributes "Main-Class": "jaso92559.app.App"
    }
}

在settings.gradle所在的路径上运行./gradle shadowJar命令。在app\build\libs中,将生成app-all.jar文件,并且可以运行java -jar app-all.jar
根据https://github.com/yukihane/stackoverflow-qa/tree/main/jaso92559

rt4zxlrg

rt4zxlrg2#

要从settings.gradle创建jar文件,您可以使用Gradle中的jar任务。此任务允许您将编译的代码和任何依赖项打包到jar文件中,然后可以使用带有**-cp选项的java**命令执行该文件。
使用settings.gradle中的jar任务创建jar文件:

// settings.gradle
include ':trend_detect'

// build.gradle (in the trend_detect module)
apply plugin: 'java'

jar {
    manifest {
        attributes 'Main-Class': 'trend_detect.Main'
    }
    from {
        configurations.compile.collect { 

it.isDirectory() ? it : 
zipTree(it) }
        }
    }

settings.gradle中的include语句指定trend_detect模块应包含在构建中。
trend_detect模块的build.gradle文件中,jar任务定义为使用指定主类(trend_detect.Main)的MANIFEST.MF文件创建jar文件。jar任务中的from语句指定jar文件应包括compile配置中的所有编译代码和依赖项。
创建jar文件后,可以使用带有**-cp选项的java**命令运行该文件,如下所示:

java -cp .\TrendAnalyzer.jar trend_detect.Main

这将使用jar文件中包含的编译代码和依赖项执行trend_detect.Main类中的**main()**方法。

相关问题