0

allprojectsセクションのgradleで次のことを行います...

   if (project.hasProperty('myVersion')) {
     project.ext.realVersion = project.myVersion
     project.version = project.myVersion
     println("project version set")
   } else {
     project.ext.realVersion = 'Developer-Build'
     project.version = 'Developer-Build'
     println("project version set to devbuild")
   }

現在、project.version を正しく使用するコードがいくつかあり、それは機能しますが、同じプロパティ project.versoin を使用する他のコードもあり、結果は「未指定」です。両方を project.realVersion に変更すると、両方とも機能します。version は、常に機能するとは限らないこの厄介な特殊プロパティのようです。

プロパティを使用するコードは次のとおりです....(私がrealVersionを使用する場所に注意してください。バージョンは機能しませんが、他の場所では正常に機能します:( )....なんて奇妙な.

task versionFile() << {
    File f = new File('output/version');
    f.mkdirs()
    File v = new File(f, 'version'+project.ext.realVersion)
    println('v='+v.getAbsolutePath())
    v.createNewFile()
}

task myZip(type: Zip) {
    archiveName 'dashboard-'+project.version+'.zip'
    from('..') {
        include 'webserver/run*.sh'
        include 'webserver/app/**'
        include 'webserver/conf/**'
        include 'webserver/play-1.2.4/**'
        include 'webserver/public/**'
        include 'webserver/lib/**'
    }
    from('output/version') {
        include '**'
    }
}
myZip.dependsOn('versionFile')
assemble.dependsOn('myZip')
4

2 に答える 2

1

version特に物件とは関係ありません。ビルド スクリプトは順番に評価されます。読み取る前versionにプロパティを設定していることを保証できない場合は、構成フェーズが終了するまでプロパティの読み取りを延期する必要があります。そうしないと、必然的に問題が発生します。これを行う 1 つの方法は、プロパティを読み取る構成コードをブロックに入れることです。別の方法ですが、構成された値が最新のチェックで考慮されないという制限があります。gradle.projectsEvaluated {}task.doFirst {}

もっと簡単な解決策がある場合もあります。たとえば、 のようなアーカイブ タスクの場合、 の代わりにとをZip設定できます。いつものように、DSL リファレンスを勉強することをお勧めします。baseNameextensionarchiveName

于 2012-09-28T18:52:08.423 に答える
0

以下のようにdoFirstに以下を配置します。

allprojects {
    doFirst {
      if (project.hasProperty('myVersion')) {
        project.ext.realVersion = project.myVersion
        project.version = project.myVersion
        println("project version set")
      } else {
        project.ext.realVersion = 'Developer-Build'
        project.version = 'Developer-Build'
        println("project version set to devbuild")
      }
    }
}
于 2012-11-13T07:43:51.130 に答える