2013-10-30 8 views
5

Gradleで注文すると混乱します。私は初心者です。以前はビルド用のAntを使っていましたが、Gradleでこれを説明する可能性のある遊びを持っています。Gradle、dependsOnオーダー

簡単なバックグラウンド(誰でも "そうしたいのですか? 私たちはwarファイルにJava WebStartアプリケーションを同梱しています。 Java 7(-40以降)では、エレメントが不足している誤った形式のjarファイルについてユーザーに促しています。私は戦争を起こすプロセスを自動化したいと思います。 binフォルダからJavaWS用のjarを抽出します。マニフェストに要素を追加します 後でjarファイルの再署名と戦争の再組み立てに行きますが、今はマニフェストのエントリを追加したいだけです。

私の問題は、dependsOn要素を持つタスクを定義していますが、タスクが間違った順序で実行されているようです(下記のgradleファイルを参照)。 私は、タスクが順番に実行されることを期待しています:delete dir;戦争を起こす。戦争を断る。 jarファイルに要素を追加します。 私は(ログファイルから)何が表示されるのですか:要素がjarに追加され、効果的に新しいjarが作成され、dirが削除され、warが処理されないので、元のwarファイルの内容になります。

私はチェックした:Gradle Task To Call Other Tasks In Orderしかし、私はmustRunAfterを使用することができないと思うが、私が持っているgradleのバージョンに関連するかもしれないが、とにかく私は異種のタスクの順序を制御したくない(私のAntベースの考え方では)タスクをお互いに依存させることによって私が望む順序を定義することができます。

誰でも私のビルドファイルの欠陥を見ることができますか? 注:resignclientjarsタスクから「dependsOn」を削除し、他のタスクを実行した後に手動で実行すると、すべて正常に動作し、Manifestの新しい要素でjarファイルが取得されるため、回避可能な回避策があります。私がここで間違っていることを知ることを好む。 1.6から

[sts] ----------------------------------------------------- 
[sts] Starting Gradle build for the following tasks: 
[sts]  :resignclientjars 
[sts] ----------------------------------------------------- 

12:06:19.658 [WARN] [org.gradle.api.internal.project.ant.AntLoggingAdapter] [ant:echo] updating:D:\dev\util\java7-clientjars\workYYY\lagan\bin\DebugWinIEBrowser.jar 
12:06:19.666 [WARN] [org.gradle.api.internal.project.ant.AntLoggingAdapter] [ant:echo] updating:D:\dev\util\java7-clientjars\workYYY\lagan\bin\DebugWinMSWord.jar 
12:06:19.670 [WARN] [org.gradle.api.internal.project.ant.AntLoggingAdapter] [ant:echo] updating:D:\dev\util\java7-clientjars\workYYY\lagan\bin\WinIEBrowser.jar 
12:06:19.674 [WARN] [org.gradle.api.internal.project.ant.AntLoggingAdapter] [ant:echo] updating:D:\dev\util\java7-clientjars\workYYY\lagan\bin\WinMSWord.jar 

12:06:19.690 [INFO] [org.gradle.execution.TaskNameResolvingBuildConfigurationAction] Selected primary task ':resignclientjars' 
12:06:19.692 [DEBUG] [org.gradle.cache.internal.DefaultFileLockManager] Waiting to acquire exclusive lock on task artifact state cache (D:\dev\util\java7-clientjars\.gradle\1.5\taskArtifacts). 
12:06:19.692 [DEBUG] [org.gradle.cache.internal.DefaultFileLockManager] Lock acquired. 
12:06:19.692 [INFO] [org.gradle.BuildLogger] Tasks to be executed: [task ':deletework', task ':getlaganwar', task ':unwar', task ':resignclientjars'] 

12:06:19.693 [DEBUG] [org.gradle.api.internal.tasks.execution.ExecuteAtMostOnceTaskExecuter] Starting to execute task ':deletework' 
12:06:19.693 [DEBUG] [org.gradle.api.internal.tasks.execution.SkipUpToDateTaskExecuter] Determining if task ':deletework' is up-to-date 
12:06:19.694 [INFO] [org.gradle.api.internal.changedetection.ShortCircuitTaskArtifactStateRepository] Task ':deletework' has not declared any outputs, assuming that it is out-of-date. 
12:06:19.694 [DEBUG] [org.gradle.api.internal.tasks.execution.SkipUpToDateTaskExecuter] task ':deletework' is not up-to-date 

12:06:19.695 [DEBUG] [org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter] Executing actions for task ':deletework'. 
12:06:19.695 [DEBUG] [org.gradle.api.internal.file.copy.DeleteActionImpl] Deleting D:\dev\util\java7-clientjars\workYYY 

12:06:19.934 [DEBUG] [org.gradle.api.internal.tasks.execution.ExecuteAtMostOnceTaskExecuter] Finished executing task ':deletework' 
12:06:19.934 [LIFECYCLE] [org.gradle.TaskExecutionLogger] :getlaganwar 
12:06:19.934 [DEBUG] [org.gradle.api.internal.tasks.execution.ExecuteAtMostOnceTaskExecuter] Starting to execute task ':getlaganwar' 
12:06:19.936 [DEBUG] [org.gradle.api.internal.tasks.execution.SkipUpToDateTaskExecuter] Determining if task ':getlaganwar' is up-to-date 

12:06:19.942 [INFO] [org.gradle.api.internal.changedetection.DefaultTaskArtifactStateRepository] Executing task ':getlaganwar' due to: 
Output file D:\dev\util\java7-clientjars\workYYY for task ':getlaganwar' has changed. 
Output file D:\dev\util\java7-clientjars\workYYY\lagan.war has been removed for task ':getlaganwar'. 
12:06:19.942 [DEBUG] [org.gradle.api.internal.tasks.execution.SkipUpToDateTaskExecuter] task ':getlaganwar' is not up-to-date 

12:06:19.944 [DEBUG] [org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter] Executing actions for task ':getlaganwar'. 

12:06:20.564 [DEBUG] [org.gradle.api.internal.tasks.execution.ExecuteAtMostOnceTaskExecuter] Finished executing task ':getlaganwar' 
12:06:20.565 [LIFECYCLE] [org.gradle.TaskExecutionLogger] :unwar 
12:06:20.565 [DEBUG] [org.gradle.api.internal.tasks.execution.ExecuteAtMostOnceTaskExecuter] Starting to execute task ':unwar' 
12:06:20.586 [DEBUG] [org.gradle.api.internal.tasks.execution.SkipUpToDateTaskExecuter] Determining if task ':unwar' is up-to-date 
12:06:20.588 [DEBUG] [org.gradle.api.internal.changedetection.DefaultFileCacheListener] Can cache files for ZIP 'D:\dev\util\java7-clientjars\workYYY\lagan.war' 
12:06:20.588 [DEBUG] [org.gradle.api.internal.changedetection.DefaultFileCacheListener] Can cache files for file 'D:\dev\util\java7-clientjars\workYYY\lagan' 
12:06:24.096 [INFO] [org.gradle.api.internal.changedetection.DefaultTaskArtifactStateRepository] Executing task ':unwar' due to: 
Output file D:\dev\util\java7-clientjars\workYYY\lagan for task ':unwar' has changed. 

12:06:24.097 [DEBUG] [org.gradle.api.internal.tasks.execution.SkipUpToDateTaskExecuter] task ':unwar' is not up-to-date 

12:06:24.100 [DEBUG] [org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter] Executing actions for task ':unwar'. 

12:06:27.863 [DEBUG] [org.gradle.api.internal.tasks.execution.ExecuteAtMostOnceTaskExecuter] Finished executing task ':unwar' 
12:06:27.863 [LIFECYCLE] [org.gradle.TaskExecutionLogger] :resignclientjars 
12:06:27.864 [DEBUG] [org.gradle.api.internal.tasks.execution.ExecuteAtMostOnceTaskExecuter] Starting to execute task ':resignclientjars' 
12:06:27.864 [INFO] [org.gradle.api.internal.tasks.execution.SkipEmptySourceFilesTaskExecuter] Skipping task ':resignclientjars' as it has no source files. 
12:06:27.864 [DEBUG] [org.gradle.api.internal.tasks.execution.ExecuteAtMostOnceTaskExecuter] Finished executing task ':resignclientjars' 
12:06:27.864 [LIFECYCLE] [org.gradle.TaskExecutionLogger] :resignclientjars UP-TO-DATE 
12:06:27.865 [DEBUG] [org.gradle.execution.taskgraph.DefaultTaskGraphExecuter] Timing: Executing the DAG took 8.173 secs 
12:06:27.865 [LIFECYCLE] [org.gradle.BuildResultLogger] 
12:06:27.865 [LIFECYCLE] [org.gradle.BuildResultLogger] BUILD SUCCESSFUL 
12:06:27.865 [LIFECYCLE] [org.gradle.BuildResultLogger] 
12:06:27.866 [LIFECYCLE] [org.gradle.BuildResultLogger] Total time: 8.886 secs 

答えて

3

ビルドスクリプトの問題はタスクの依存関係ではなく、resignclientjarsのタスク定義が間違っています。 実行フェーズの代わりに、コンフィグレーションフェーズ(すなわち、すべてビルド呼び出し)の作業を行っています。次のように正しいタスク定義はなります

task resignclientjars(dependsOn: unwar) { 
    doLast { 
     ... 
    } 
} 

あなたはGradle User GuideまたはGradle forumsに実行段階対構成フェーズ上に読むことができます。

4

あなたはGradleの1.5を使用している、とmustRunAfter日付:

task (deletework, type: Delete) { 
    delete 'workYYY' 
} 

task (getlaganwar, type: Copy, dependsOn: deletework) { 
    from "d:/dev/v8-0-5/wars" 
    into "workYYY" 
    include 'lagan.war' 
} 

task (unwar, type: Copy, dependsOn: getlaganwar) { 
    from zipTree(file('workYYY/lagan.war')) 
    into file("workYYY/lagan") 
} 

task (resignclientjars, type: Copy, dependsOn: unwar) { 
//task (resignclientjars, type: Copy) { 

// mustRunAfter unwar 

    def workDir = file("workYYY/lagan") 
    def binDir = file(new File(workDir, "bin")) 

    def collection = files { binDir.listFiles() } 
    collection.each { 
     File jarFile = new File(binDir, it.name) 
     ant.echo(message: "updating:${jarFile.absolutePath}") 
     ant.jar(jarfile: jarFile, update: 'true') { 
      manifest { 
       attribute(name: 'Implementation-Title', value: 'Lagan Enterprise') 
       attribute(name: 'Implementation-Vendor', value: 'Lagan Enterprise') 
       attribute(name: 'Implementation-Version', value: 'Lagan Enterprise') 
       attribute(name: 'Application-Name', value: 'Lagan Enterprise') 
       attribute(name: 'Permissions', value: 'all-permissions') 
      } 
     } 
    } 
} 

//unwar.mustRunAfter getlaganwar 
//getlaganwar.mustRunAfter deletework 
//resignclientjars.mustRunAfter getlaganwar 

デバッグ出力には、以下が含まれています。現在のバージョンは1.8です。

dependsOnは、タスクの順序を修正しません。これは、さまざまなバグ報告の中で、厄介な問題について議論されています。この問題を回避するには、無関心のタスク、またはmustRunAfterの間でdepencenciesを使用します。

関連する問題