如何从 gradle 构建中获取要包含在运行时 Swing 应用程序中的版本属性

2022-09-01 05:41:40

我有一个简单的父项目,其中包含模块/应用程序。我选择的构建工具是 gradle。父项定义如下。build.gradle

apply plugin: 'groovy'
dependencies {
    compile gradleApi()
    compile localGroovy()
}


allprojects {
    repositories {
        mavenCentral()
    }

    version "0.1.0-SNAPSHOT"
}

我想做的是在我的 Swing 应用程序中使用 version 属性 (0.1.0-SNAPSHOT)。具体来说,我希望它显示在主JFrame的标题栏中。我希望能够做这样的事情this.setTitle("My Application - v." + ???.version);

该应用程序是一个普通的java项目,但我不反对添加时髦的支持,它会有所帮助。


答案 1

我喜欢在构建期间创建属性文件。以下是直接从Gradle执行此操作的方法:

task createProperties(dependsOn: processResources) {
  doLast {
    new File("$buildDir/resources/main/version.properties").withWriter { w ->
        Properties p = new Properties()
        p['version'] = project.version.toString()
        p.store w, null
    }
  }
}

classes {
    dependsOn createProperties
}

答案 2

您始终可以按照某人的建议使用暴力破解,并在构建期间生成属性文件。更优雅的答案,只部分起作用,将使用

getClass().getPackage().getImplementationVersion()

问题是,这只有在从生成的 jar 运行应用程序时才有效 - 如果您直接从 IDE/扩展类运行它,则上面的 getPackage 将返回 null。对于许多情况来说,它已经足够好了 - 如果您从IDE(获取空包)运行,只需显示“开发”即可,并且适用于实际的客户端部署。


推荐