Как отобразить версию приложения на экране?

Я хочу отображать текущую версию моего приложения на экране (с помощью метки).

  • Как я могу это сделать?
  • Где мне нужно установить переменную версии, если я использую Gradle?
  • Или как мне получить версию из файла build.gradle?
  • Или как я могу получить версию из внешнего файла, например манифеста, чтобы использовать ее в build.gradle?

Или как мне отобразить текущую версию моего приложения на экране, где мне нужно установить эту текущую версию и как использовать эту версию в Gradle?

Что для вас версия? Это версия вашего приложения в координатах GAV?

jewelsea 02.08.2024 23:25

Координация GAV — это когда вы используете maven. В gradle вы указываете версию и группу. По большому счету да

Лев Елькин 02.08.2024 23:45

Как только версия окажется в файле свойств, вы можете загрузить свойства из потока ресурсов (или внедрить значения свойств, если вы используете Spring) и установить их как текст в метке JavaFX для отображения в вашем пользовательском интерфейсе.

jewelsea 03.08.2024 00:24

Итак, если я напишу версию проекта в файле свойств, как я могу загрузить свойства из кода, если из кода я могу получить доступ только к ресурсам (без пружины)

Лев Елькин 03.08.2024 00:49

@jewelsea Только что добавил ответ :) (был в процессе написания)

Slaw 03.08.2024 00:55

Да, спасибо @Slaw, я только что изучил Gradle и получил тот же ответ, все, что мне нужно было добавить к build.gradle, чтобы это заработало, это processResources { expand(version: version) } и version=${version} в свойствах.

jewelsea 03.08.2024 01:09
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
3
7
57
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Один из способов, с помощью которого я делал это раньше, — использовать инструмент сборки для заполнения заполнителей в ресурсе файла свойств, а затем загружать этот файл свойств во время выполнения. Это то же самое, что описано Jewelsea в комментариях к вопросу.

В Maven есть различные способы записать версию проекта в файл свойств , должен быть аналогичный механизм с Gradle.

Как только версия окажется в файле свойств, вы можете загрузить свойства из потока ресурсов (или внедрить значения свойств, если вы используете Spring) и установить их как текст в метке JavaFX для отображения в вашем пользовательском интерфейсе.

Основное преимущество этого подхода заключается в том, что он сохраняет инструмент сборки в качестве источника истины. Измените значение, и оно автоматически распространится на созданное приложение.


Пример

Вот пример, протестированный с использованием Java 22.0.2, JavaFX 22.0.2 и Gradle 8.9. В этом примере версия проекта используется в качестве версии приложения, но вы, конечно, можете использовать другое значение, если две версии не совпадают.

Ресурсы

app.properties

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 (Kotlin DSL)

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
        |   \---sample
        |           Main.java
        |           
        \---resources
                app.properties

Выход

Вот результат от бега ./gradlew run.

Большое спасибо!!! Это решило мою проблему!

Лев Елькин 03.08.2024 01:15

Но я внес некоторые изменения: - build.gradle переведен в groovy - Сделан отдельный класс AppProperties со списком свойств на будущее.

Лев Елькин 03.08.2024 01:17

Другие вопросы по теме