2016-12-02 6 views
2

私のasciidoctorドキュメントで使用するために、最新のgitタグをgradleタスクで取得しようとしています。私の仕事が成功しても、私のasciidoctorカスタム属性は常に空です。これは私が私の最新のgitタグを取得した方法です:先行タスクから発行されたasciidoctor gradleタスクにカスタム属性を与える

project.ext { 
    latestTag= 'N/A' 
} 
task retrieveLatestTag { 
    doLast { 

     new ByteArrayOutputStream().withStream { os -> 
      def result = exec { 
       commandLine('git', 'rev-list', '--tags', '--max-count=1') 
       standardOutput = os 
      } 
      ext.latestTagName = os.toString().trim() 
     } 

    } 
} 
task setLastStableVersion { 
    dependsOn retrieveLatestTag 
    doLast { 

     new ByteArrayOutputStream().withStream { os -> 
      def result = exec { 
       commandLine('git', 'describe', '--tags', retrieveLatestTag.latestTagName) 
       standardOutput = os 
      } 
      project.ext.latestTag = os.toString().trim() 
     } 

    } 
} 

そして今、ここに私のasciidoctorタスクされています

asciidoctor { 
    dependsOn setLastStableVersion 
    attributes \ 
    'build-gradle' : file('build.gradle'), 
    'source-highlighter': 'coderay', 
    'imagesdir': 'images', 
    'toc': 'left', 
    'toclevels': '4', 
    'icons': 'font', 
    'setanchors': '', 
    'idprefix': '', 
    'idseparator': '-', 
    'docinfo1': '', 
    'tag': project.latestTag 
} 

マイカスタムプロパティタグは、私が最初に設定されたデフォルト値のように、常に「N/A」でありますタグが正常に取得されても誰もこれのような前に何かをしようとしましたか?

答えて

1

ここでの問題は、実行フェーズで実行されるdoLastクロージャでsetLastStableVersionが宣言されているため、構成フェーズでasciidoctorが構成されているという問題です。

あなたが価値がない理由は、実行前に設定が行われ、asciidoctorが設定されている場合、setLastStableVersionタスクもretrieveLatestTagも実行されないという事実です。

あなたのgitタグを取得するためのタスクを持つ必要はありません。あなたのタスクからdoLastを削除するか、ロジックをどのタスクからも外してください。

new ByteArrayOutputStream().withStream { os -> 
     def result = exec { 
      commandLine('git', 'rev-list', '--tags', '--max-count=1') 
      standardOutput = os 
     } 
     project.ext.latestTagName = os.toString().trim() 
    } 

new ByteArrayOutputStream().withStream { os -> 
     def result = exec { 
      commandLine('git', 'describe', '--tags', latestTagName) 
      standardOutput = os 
     } 
     project.ext.latestTag = os.toString().trim() 
    } 

asciidoctor { 
    dependsOn setLastStableVersion 
    attributes \ 
    'build-gradle' : file('build.gradle'), 
    'source-highlighter': 'coderay', 
    'imagesdir': 'images', 
    'toc': 'left', 
    'toclevels': '4', 
    'icons': 'font', 
    'setanchors': '', 
    'idprefix': '', 
    'idseparator': '-', 
    'docinfo1': '', 
    'tag': project.latestTag 
} 

およびhereビルドのライフサイクルについては、次のとおりです。

+0

ありがとうございます、それは魅力のように動作します!私がgradleに慣れてこなかったので、私はこれらの段階について本当に気づいていなかった。 –

関連する問題