2017-04-21 8 views
1

特定の値が定義されているときにタスクを実行させようと苦労しています。定義されたプロパティでのみ実行するタスクを実行する

私はGradle 3.5を使用しています。

task signJar(type: SignJar, dependsOn: reobfJar) { 
    onlyIf { 
     project.hasProperty('mod_keystore') 
    } 

    keyStore = project.keyStore 
    alias = project.keyStoreAlias 
    storePass = project.keyStorePass 
    keyPass = project.keyStoreKeyPass 
    inputFile = jar.archivePath 
    outputFile = jar.archivePath 
} 

ご覧のとおり、私はすでにonlyIfステートメントを試しましたが、タスクはまだ実行されています。定義された場所

Could not get unknown property 'keyStore' for root project 'JustAnotherEnergy' of type org.gradle.api.Project. 

プロパティ「mod_keystoreは」はあるが、コードの取得の実行:これはクラッシュになりません。

task signJar(type: SignJar, dependsOn: reobfJar) { 
    if(project.hasProperty('mod_keystore')) { 
     keyStore = project.keyStore 
     alias = project.keyStoreAlias 
     storePass = project.keyStorePass 
     keyPass = project.keyStoreKeyPass 
     inputFile = jar.archivePath 
     outputFile = jar.archivePath 
    } 
} 

これは機能します。コードは実行されませんが、他の問題が発生しています: プロパティ 'mod_keystore'が定義されていない場合、Gradleは 'keyStore'プロパティの値を設定できませんが、 SignJarでは、この値を設定する必要があります。

これは、プロパティ 'mod_keystore'が定義されている場合にのみ、このタスクを実行する必要があることを意味します。定義されていない場合、タスクはスキップする必要があります。

答えて

3

ご覧のとおり、私はすでにonlyIfステートメントを試しましたが、タスクはまだ実行されています。

いいえ、タスクは実行されません。 コンフィグレーションフェーズ実行フェーズを区別する必要があります。タスクのプロパティを設定しているタスククロージャは、タスクが作成された直後にコンフィグレーションフェーズの間に実行されます。 実行フェーズの間に、タスクのアクション(タスクタイプによって定義される)と、doFirstまたはdoLastによって追加されたクロージャのみが実行されます。

無効またはonlyIfまたはenabledを経由して、タスクをスキップした場合、あなただけ実行(フェーズ)をスキップ/無効タスクのではなく、そのの構成(フェーズ)。あなたの特定の問題の解決策として

、あなたはonlyIf条件であなたの最初のアプローチに依存しているが、あなたのプロジェクトのプロパティにアクセスするためのフェイルセーフウェイを追加することができます。

task signJar(type: SignJar, dependsOn: reobfJar) { 
    onlyIf { 
     hasProperty('mod_keystore') 
    } 

    keyStore = findProperty('keyStore') 
    alias = findProperty('keyStoreAlias') 
    storePass = findProperty('keyStorePass') 
    keyPass = findProperty('keyStoreKeyPass') 
    inputFile = jar.archivePath 
    outputFile = jar.archivePath 
} 
関連する問題