Я хочу отображать текущую версию моего приложения на экране (с помощью метки).
Или как мне отобразить текущую версию моего приложения на экране, где мне нужно установить эту текущую версию и как использовать эту версию в Gradle?
Координация GAV — это когда вы используете maven. В gradle вы указываете версию и группу. По большому счету да
В Maven есть различные способы записать версию проекта в файл свойств , должен быть аналогичный механизм с Gradle.
Как только версия окажется в файле свойств, вы можете загрузить свойства из потока ресурсов (или внедрить значения свойств, если вы используете Spring) и установить их как текст в метке JavaFX для отображения в вашем пользовательском интерфейсе.
Итак, если я напишу версию проекта в файле свойств, как я могу загрузить свойства из кода, если из кода я могу получить доступ только к ресурсам (без пружины)
@jewelsea Только что добавил ответ :) (был в процессе написания)
Да, спасибо @Slaw, я только что изучил Gradle и получил тот же ответ, все, что мне нужно было добавить к build.gradle
, чтобы это заработало, это processResources { expand(version: version) }
и version=${version}
в свойствах.
Один из способов, с помощью которого я делал это раньше, — использовать инструмент сборки для заполнения заполнителей в ресурсе файла свойств, а затем загружать этот файл свойств во время выполнения. Это то же самое, что описано Jewelsea в комментариях к вопросу.
В Maven есть различные способы записать версию проекта в файл свойств , должен быть аналогичный механизм с Gradle.
Как только версия окажется в файле свойств, вы можете загрузить свойства из потока ресурсов (или внедрить значения свойств, если вы используете Spring) и установить их как текст в метке JavaFX для отображения в вашем пользовательском интерфейсе.
Основное преимущество этого подхода заключается в том, что он сохраняет инструмент сборки в качестве источника истины. Измените значение, и оно автоматически распространится на созданное приложение.
Вот пример, протестированный с использованием Java 22.0.2, JavaFX 22.0.2 и Gradle 8.9. В этом примере версия проекта используется в качестве версии приложения, но вы, конечно, можете использовать другое значение, если две версии не совпадают.
app.properties
app.version = ${version}
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();
}
}
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
.
Большое спасибо!!! Это решило мою проблему!
Но я внес некоторые изменения: - build.gradle переведен в groovy - Сделан отдельный класс AppProperties со списком свойств на будущее.
Что для вас версия? Это версия вашего приложения в координатах GAV?