gpt4 book ai didi

java - 按需在 Gradle 中制作 NON-FAT jar

转载 作者:行者123 更新时间:2023-12-01 14:29:01 26 4
gpt4 key购买 nike

我正在使用 Gradle。通常我会构建 FAT jar。没有问题,但是这个时候,我还需要制作NON-FAT jar。我的意思是我想排除所有依赖的库并使用 -cp 选项运行 jar,如下所示:

java -cp "/sample1/lib/myjar.jar:/sample2/lib/depended.jar"com.example.main.Runner

(在 FAT jar 中,java -jar myjar.jar 是相同的东西,它包含 depended.jar)

这是我的build.gradle

apply plugin: 'java'
apply plugin: 'application'

jar.baseName = 'myjar'
version = ''
def mainClass = 'com.example.main.Runner'
mainClassName = mainClass

def defaultEncoding = 'UTF-8'

repositories {
flatDir dirs: "${projectDir}/libs"
}

dependencies {
compile ':commons-chain:1.2'
compile ':commons-io:2.4'

testCompile ':junit:4.12'
testCompile ':hamcrest-core:1.3'
}
jar {
manifest {
attributes 'Implementation-Version': version,
'Main-Class': mainClass
}
from {configurations.compile.collect { it.isDirectory() ? it : zipTree(it) }}
}

我仍然想保留它用于通常的 FAT jar 创建。因此,我尝试附加如下任务:

尝试#1

task makeSlimJar {
jar.baseName = 'myjar.slim'
jar {
manifest {
// remove main class
attributes 'Implementation-Version': version
}
from {configurations.compile.collect { it.isDirectory() ? it : zipTree(it) }}
}

尝试 #2

task makeSlimJar {
jar.baseName = 'myjar.slim'
jar {
manifest {
// remove main class
attributes 'Implementation-Version': version
}
from {configurations.compile.collect { it.isDirectory() ? it : zipTree(it) }}

tasks.Jar.execute()
}

尝试 #3

task makeSlimJar {
jar.baseName = 'myjar.slim'
jar {
manifest {
// remove main class
attributes 'Implementation-Version': version
}
from {configurations.compile.collect { it.isDirectory() ? it : zipTree(it) }}
dependsOn Jar
}

添加后,我运行了 gradle makeSlimJar。以上所有我的尝试都失败了(以编程方式,它成功了)并且刚刚创建了名称为 myjar.slim.jar 的 FAT jar。

有没有办法在同一个 build.gradle 文件中同时使用 FAT 和 NON-FAT jar?……还是我哪里不对?

我认为删除非 FAT jar 的 apply plugin: 'application' 是我最后的选择。

如果可以,请帮助我。

谢谢,

最佳答案

实际将依赖项添加到您的 jar 的代码是这一行:

from {configurations.compile.collect { it.isDirectory() ? it : zipTree(it) }}

您的构建脚本通常会默认构建一个“slim jar”,除非您添加了代码来覆盖此行为:

jar {
manifest {
attributes 'Implementation-Version': version,
'Main-Class': mainClass
}
from {configurations.compile.collect { it.isDirectory() ? it : zipTree(it) }}
}

我建议删除这些行。当您运行 gradle clean build 时,这将构建一个普通的 jar(没有依赖项)。

然后您可以添加一个额外的任务来创建您的“fatjar”,如下所示:

task fatjar << {
jar.doFirst {
println "creating fatjar"
jar {
from {configurations.compile.collect { it.isDirectory() ? it : zipTree(it) }}
}
}
}

您可以使用此任务通过运行 gradle clean fatjar build 来构建 fatjar。

或者,您可以尝试查看诸如 springboot 之类的框架,它可以为您完成所有这些工作。

关于java - 按需在 Gradle 中制作 NON-FAT jar,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39225022/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com