javafx,如何在屏幕上显示应用程序版本

问题描述 投票:0回答:1

我想在屏幕上显示(使用标签)我的应用程序的当前版本。

  • 我该怎么做?
  • 如果我使用gradle,我需要在哪里设置版本变量?
  • 或者如何从 build.gradle 文件获取版本?
  • 或者我如何从外部文件(如清单)获取版本以在 build.gradle 中使用它?

所以: 如何在屏幕上显示我的应用程序的当前版本,我需要在哪里设置当前版本以及如何在gradle中使用此版本

我现在不知道该怎么做

java gradle javafx
1个回答
0
投票

我过去完成此操作的一种方法是利用构建工具填充属性文件资源中的占位符,然后在运行时加载该属性文件。这和jewelsea在问题评论中描述的一样。

在 Maven 中,有多种方法可以将项目版本写入属性文件,应该有一个与 Gradle 类似的机制

一旦版本位于属性文件中,您就可以从资源流加载属性(或者如果您使用 Spring,则注入属性值)并将其设置为 JavaFX 标签中的文本以显示在 UI 中。

这种方法的主要好处是它使您的构建工具成为事实的来源。更改值,它将自动传播到构建的应用程序。


示例

以下是使用 Java 22.0.2、JavaFX 22.0.2 和 Gradle 8.9 测试的示例。此示例使用项目的版本作为应用程序的版本,但如果两个版本不相同,您当然可以使用不同的值。

资源

应用程序属性

app.version = ${version}

Java 源代码

Main.java

package sample;

import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.Label;
import javafx.scene.layout.StackPane;
import javafx.stage.Stage;
import java.util.Properties;

public class Main extends Application {

  private String appVersion;

  @Override
  public void init() throws Exception {
    var props = new Properties();
    try (var in = Main.class.getResourceAsStream("/app.properties")) {
      props.load(in);
    }
    appVersion = props.getProperty("app.version", "<NO-VERSION>");
  }

  @Override
  public void start(Stage primaryStage) throws Exception {
    var label = new Label("Hello, from Example v" + appVersion + "!");
    primaryStage.setScene(new Scene(new StackPane(label), 500, 300));
    primaryStage.setTitle("Example - " + appVersion);
    primaryStage.show();
  }
}

Gradle 文件

settings.gradle.kts

rootProject.name = "demo"

build.gradle.kts

plugins {
  id("org.openjfx.javafxplugin") version "0.1.0"
  application
}

group = "sample"
version = "0.1.0"

repositories { 
  mavenCentral()
}

javafx {
  modules("javafx.controls")
  version = "22.0.2"
}

application {
  mainClass = "sample.Main"
}

tasks {
  // This is the part responsible for filling in the placeholders in the
  // properties file.
  processResources {
    inputs.property("version", project.version) // Configure task to rerun if value changes
    filesMatching("app.properties") {
      expand("version" to project.version)
    }
  }
}

项目目录

<project-dir>
|   build.gradle.kts
|   gradlew
|   gradlew.bat
|   settings.gradle.kts
|   
+---gradle
|   |   
|   \---wrapper
|           gradle-wrapper.jar
|           gradle-wrapper.properties
|           
\---src
    \---main
        +---java
        |   \---workshop
        |           Main.java
        |           
        \---resources
                app.properties

输出

这是运行的结果

./gradlew run

Screenshot of UI.

© www.soinside.com 2019 - 2024. All rights reserved.