Как получить атрибут версии из сборки gradle для включения в приложение runtime 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 поддержать его поможет.
4 ответов
Мне нравится создавать файл свойств во время сборки. Вот способ сделать это из 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
}
вы всегда можете использовать грубую силу, как кто-то предложил и генерировать файл свойств в процессе сборки. Более элегантный ответ, который работает только частично, будет использовать
getClass().getPackage().getImplementationVersion()
проблема в том, что это будет работать, только если вы запустите приложение из сгенерированного jar - если вы запустите его непосредственно из IDE/расширенных классов, getPackage выше вернет null. Это достаточно хорошо для многих случаев - просто отобразите "развитие", если вы запускаете из IDE (geting null package) и будете работать для фактического развертывание клиентов.
лучшая идея-сохранить версию проекта в . Все свойства из этого файла будут автоматически загружены и могут быть использованы в build.gradle
сценарий.
затем, если вам нужна версия в вашем приложении swing, добавьте под src/main/resources
папка и фильтр этого файла во время сборки приложения,здесь это сообщение, которое показывает, как это должно быть сделано.
version.properties
будет включен в окончательную банку, следовательно, может быть прочитан и через ClassLoader
и свойства из этого файла могут отображаться в приложении.
более простое и обновленное решение @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
}