Как получить атрибут версии из сборки gradle для включения в приложение Swing для выполнения
У меня есть простой родительский проект с модулями/приложениями внутри него. Мой выбор для сборки - gradle. Родитель build.gradle
определяется ниже.
apply plugin: 'groovy'
dependencies {
compile gradleApi()
compile localGroovy()
}
allprojects {
repositories {
mavenCentral()
}
version "0.1.0-SNAPSHOT"
}
Что бы я хотел сделать, это использовать атрибут версии (0.1.0-SNAPSHOT) в моем приложении swing. В частности, я бы хотел, чтобы он отображался в заголовке основного JFrame. Я ожидаю, что смогу сделать что-то вроде this.setTitle("My Application - v." + ???.version);
Приложение представляет собой простой Java-проект, но я не против добавления поддержки groovy, это поможет.
Ответы
Ответ 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 (получите нулевой пакет) и будете работать для фактических развертываний клиентов.
Ответ 3
Лучшая идея - сохранить версию проекта в файле gradle.properties
. Все свойства этого файла будут автоматически загружены и могут использоваться в build.gradle
script.
Затем, если вам нужна версия в вашем приложении swing, добавьте файл version.properties
в папку src/main/resources
и отфильтруйте этот файл во время сборки приложения, здесь - это сообщение, в котором показано, как это сделать.
version.properties
будет включен в финальную банку, поэтому ее можно прочитать и через ClassLoader
, а свойства из этого файла могут быть отображены в приложении.
Ответ 4
Упрощенное и обновленное решение @Craig Trader (готово к Gradle 4.0/5.0)
task createProperties {
doLast {
def version = project.version.toString()
def file = new File("$buildDir/resources/main/version.txt")
file.write(version)
}
}
war {
dependsOn createProperties
}