gpt4 book ai didi

java - 如何在 Gradle 中创建 jar,同时保持 applicationDefaultJvmArgs 路径不为空?

转载 作者:行者123 更新时间:2023-12-02 11:27:22 30 4
gpt4 key购买 nike

这个问题我想不通。如何在 Gradle 中创建具有非空 applicationDefaultJvmArgs 的 jar 文件?

在我的 java 程序中,我的配置文件需要以下字符串变量:

String CONFIG_PATH = "config.dir";
String configFilePath = System.getProperty(CONFIG_PATH);

我有以下 build.gradle 文件。

apply plugin: 'java'
apply plugin: 'eclipse'
apply plugin: 'application'
apply plugin: 'distribution'

version 1.0
mainClassName = 'app.service.AppMain'

def projectDir = file("src/main/java")
def configDir = file("src/main/config")
def resourceDir = file("src/main/resources")

applicationDefaultJvmArgs = ["-Dconfig.dir=${configDir}", "-Dresources.dir=${resourceDir}"]

sourceSets {
main {
java {
srcDir projectDir
}
resources {
srcDirs configDir, resourceDir
}
}

}

dependencies {
...
}

distributions {
main {
contents {
into('') {
from { fileTree(configDir) }
}
}
}
}

repositories {
maven {
url "https://plugins.gradle.org/m2/"
}
def installDir = System.getProperty("user.dir") + "/lib"
def d = new File (installDir)
if ( d.exists() ) {
flatDir { dirs installDir }
} else {
mavenCentral()
}
}

jar {
manifest {
attributes("Implementation-Version": "$version",
"Main-Class": "$mainClassName")
}
doFirst {
from { configurations.compile.collect { it.isDirectory() ? it : zipTree(it) } }
}
exclude 'META-INF/*.RSA', 'META-INF/*.SF','META-INF/*.DSA'
}

// Augments the run task to add arguments
// e.g. gradle run -PappArgs=--list
run {
if (project.hasProperty("appArgs")) {
args(appArgs.split(','))
}
}

构建后,当我从 app/build/distributions/app/bin/ 目录运行 ./app 可执行文件时,configFilePath 字符串将正确打印为 /home/user/app/src/main/config

但是,当我转到 app/build/libs 目录并运行 java -jar app-1.0.jar 时,我得到 null对于我的 configFilePath.非常感谢任何帮助。

最佳答案

简短回答:你不能,jar 无法容纳 jvm 参数。

applicationDefaultJvmArgs 是来自 application plugin 的属性。 。它对常规构建的 jar 没有影响。

您不能在 jar 中包含 jvm 参数,java 二进制文件直接将它们作为参数。因此,要么坚持使用 application 插件提供的生成的可执行文件,要么对其进行硬编码(但我认为您不会)

关于java - 如何在 Gradle 中创建 jar,同时保持 applicationDefaultJvmArgs 路径不为空?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49517098/

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