java - 使用 gradle 任务在 jar 中设置变量值

标签 java gradle jar

我有一个客户端和服务器架构。

客户端是使用以下 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/

相关文章:

java - 数据绑定(bind)插件使用旧版本的支持库

java - 如何使用 cxf 在 Jersey Jax-rs 项目中禁用 CN 检查

java - RandomAccessFile 写入是异步的吗?

android - 错误 :org. gradle.wrapper.WrapperExecutor.forProjectDirectory(Ljava/io/File;Ljava/lang/Appendable;)Lorg/gradle/wrapper/WrapperExecutor;

gradle - 如何在 Kotlin DSL 的脚本插件中包含 Gradle 插件?

java - NoClassDefFoundError:com/google/api/client/auth/oauth2/Credential

java - 在 Java 中从图像创建缩略图

java - Hibernate 自动创建数据库

java - 如何在 Eclipse 中将带有图像库的 Java 项目导出为 jar 文件

java - JAR 类路径和外部 jar