如何在 Gradle 中创建一个 jar,同时保持 applicationDefaultJvmArgs 路径不为空?
How do I create a jar in Gradle while keeping applicationDefaultJvmArgs path not null?
我搞不懂这个问题。如何在 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 可执行文件来自 app/build/distributions/app/bin/ 目录时configFilePath 字符串正确打印为 /home/user/app/src/main/config.
但是,当我转到 app/build/libs 目录和 运行 java -jar app-1 时。 0.jar 我的 configFilePath 得到 null。非常感谢任何帮助。
简答:你不能,jar
不能保存 jvm args。
applicationDefaultJvmArgs
是 application plugin 的 属性。它对常规构建的 jar 没有影响。
您不能在 jar 中包含 jvm args,java
二进制文件直接将它们作为参数。所以要么你坚持使用 application
插件提供的生成的可执行文件,要么你硬编码它(但我认为你不会)
我搞不懂这个问题。如何在 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 可执行文件来自 app/build/distributions/app/bin/ 目录时configFilePath 字符串正确打印为 /home/user/app/src/main/config.
但是,当我转到 app/build/libs 目录和 运行 java -jar app-1 时。 0.jar 我的 configFilePath 得到 null。非常感谢任何帮助。
简答:你不能,jar
不能保存 jvm args。
applicationDefaultJvmArgs
是 application plugin 的 属性。它对常规构建的 jar 没有影响。
您不能在 jar 中包含 jvm args,java
二进制文件直接将它们作为参数。所以要么你坚持使用 application
插件提供的生成的可执行文件,要么你硬编码它(但我认为你不会)