web-dev-qa-db-ja.com

ランタイムSwingアプリケーションに含まれるgradleビルドからバージョン属性を取得する方法

モジュール/アプリケーションが含まれる単純な親プロジェクトがあります。私が選んだビルドツールは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サポートを追加することに反対することはありません。

18
Domenic D.

ビルド中にプロパティファイルを作成するのが好きです。これを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
}
26
Craig Trader

誰かが提案したようにいつでもブルートフォースを使用し、ビルド中にプロパティファイルを生成できます。部分的にしか機能しないよりエレガントな答えは、使用することです

getClass().getPackage().getImplementationVersion()

問題は、生成されたjarからアプリケーションを実行する場合にのみ機能することです。IDE/拡張クラスから直接実行する場合、上記のgetPackageはnullを返します。多くの場合に十分です-IDE(nullパッケージを取得)から実行する場合は「DEVELOPMENT」と表示するだけで、実際のクライアント展開で機能します。

11

より良いアイデアは、プロジェクトのバージョンをgradle.propertiesファイル。このファイルのすべてのプロパティは自動的に読み込まれ、build.gradle 脚本。

次に、swingアプリケーションでバージョンが必要な場合は、version.propertiesファイルsrc/main/resourcesフォルダーとアプリケーションのビルド中にこのファイルをフィルターします。 here は、その方法を示す投稿です。

version.propertiesは最終的なjarに含まれるため、ClassLoaderを介して読み取ることができ、このファイルのプロパティをアプリケーションに表示できます。

10
Opal

@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
}
2
Topera