モジュール/アプリケーションが含まれる単純な親プロジェクトがあります。私が選んだビルドツールはgradleです。親_build.gradle
_は以下で定義されます。
_apply plugin: 'groovy'
dependencies {
compile gradleApi()
compile localGroovy()
}
allprojects {
repositories {
mavenCentral()
}
version "0.1.0-SNAPSHOT"
}
_
私がやりたいのは、swingアプリケーション内でバージョン属性(0.1.0-SNAPSHOT)を利用することです。具体的には、メインのJFrameのタイトルバーに表示したいと思います。 this.setTitle("My Application - v." + ???.version);
のようなことができると期待しています
アプリケーションは単純なJavaプロジェクトですが、groovyサポートを追加することに反対することはありません。
ビルド中にプロパティファイルを作成するのが好きです。これを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(nullパッケージを取得)から実行する場合は「DEVELOPMENT」と表示するだけで、実際のクライアント展開で機能します。
より良いアイデアは、プロジェクトのバージョンをgradle.properties
ファイル。このファイルのすべてのプロパティは自動的に読み込まれ、build.gradle
脚本。
次に、swingアプリケーションでバージョンが必要な場合は、version.properties
ファイルsrc/main/resources
フォルダーとアプリケーションのビルド中にこのファイルをフィルターします。 here は、その方法を示す投稿です。
version.properties
は最終的なjarに含まれるため、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
}