我有一个客户端和服务器架构。
客户端是使用以下 Gradle 任务构建的可运行的 .jar
文件:
jar {
archiveName = "app.jar"
from sourceSets.main.output.classesDir
include '**/*.class'
manifest {
attributes 'Main-Class': 'com.bobbyrne01.app.Main'
}
exclude 'META-INF/*.RSA', 'META-INF/*.SF','META-INF/*.DSA'
}
我正在更改此客户端的身份验证方式。
问题是,我想指定客户端在构建期间应使用哪种身份验证方法。
这样,当用户下载 .jar
时,他们只会运行它,并且我在构建期间激活的任何身份验证方法都将在 .jar
中处于 Activity 状态。
设置此authenticationType
变量/标志的最佳方法是什么?
对于服务器,有一个用于身份验证的接口(interface)和许多实现不同身份验证方法的类。在构建服务器时,我指定了一个 gradle 属性,该属性被设置为 docker 镜像上的环境变量。 因此,在运行时,服务器使用反射来确定要实例化哪个身份验证类。
但我不确定如何在 jar 中设置类似的值。
最佳答案
使用包含一个值的属性文件,该值允许在运行时决定要使用哪种身份验证机制。
将其定义为
authentication=${authentication} or
或
authentication=@@authentication@@
在源属性文件中。并在标准 processResources
gradle 任务(类型为 Copy
)中使用 Expand 或 Filter,以便将占位符替换为您要使用的实际值。
参见https://docs.gradle.org/current/dsl/org.gradle.api.tasks.Copy.html#org.gradle.api.tasks.Copy:expand(java.util.Map)和https://docs.gradle.org/current/dsl/org.gradle.api.tasks.Copy.html#org.gradle.api.tasks.Copy:filter(java.util.Map,%20java.lang.Class) .
关于java - 使用 gradle 任务在 jar 中设置变量值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58398874/