2016-08-16 19 views
0

私はこれを1日半ほど苦労してきました。私は、Gradleの中に次のAnt概念を複製しようとしている:GradleのAnt taskdefに相当するものは何ですか?

runexe

<macrodef name="runexe" > 
    ... 
</macrodef> 

として他の場所で宣言され、また、taskdefまたは私ができるようにしたいと思いscriptdefすなわちかもしれない

<target name="test"> 
    ... 
    <runexe name="<filename> params="<params>" /> 
    ... 
</target> 

再利用可能な定義済みのコードブロックを呼び出して、Gradleタスク内から必要なパラメータを渡します。私は多くのことを試しました。 exeを問題なく実行するタスクを作成できます。

task runexe(type: Exec){ 
    commandLine 'cmd', '/c', 'dir', '/B' 
} 

task test(dependsOn: 'runexe') { 
    runexe { 
     commandLine 'cmd', '/c', 'dir', '/N', 'e:\\utilities\\' 
    } 
} 

test << { 
    println "Testing..." 

    // I want to call runexe here. 

    ... 
} 

実行するにはdependsOnを使用します。しかし、これで私が必要なときに正確にrunexeを実行することはできません。私はexecutableargscommandLineで徹底的に実験してきました。私はexecで遊んだことがあり、ここで、そしてネットの周りにいくつかの異なるバリエーションを試しました。私はまた、Gradleサイトから入手可能な無料の書籍を扱っています。私がする必要がどのような

がディレクトリからファイルのリストを読んで、他のいくつかの引数を持つアプリケーションに各ファイルを渡しています。ファイルのリストは、実行時間まではわかりません。つまり、スクリプトがそれらを読み込むまで、リストが変わり、呼び出しを繰り返し行う必要があります。

私の最良のオプションは、現在、私は大丈夫かもしれhereを、見つけたもののように見えるが、それはちょうど良い方法があるはずと思われます。私はタスクが一度呼び出されることを意味し、別のタスク内からタスクを呼び出すことも、パラメータを渡すこともできないことを理解していますが、これに対する正しいアプローチがGradleにあることを知りたいと思っています。私は、これはすべてWeb上で頻繁に聞かれる質問があると私は明確な答えたり、私が仕事をすることができます解決策を見つけるために、まだだとのGradleのデザイナーの一つが親切に私を啓発するのかもしれないことを願っています。

+0

のGradleは、設計により、飛躍的に柔軟です。最後の段落で言及されたリンクで使用されているテクニックは、私にとってうまく見えます。すなわち、すべてがタスクでなければならないわけではない。メソッドを定義するのは問題ありません。 –

+0

ありがとうございます。私は今、私が望むことをするために関数を使用しましたが、私はまだもっとGradle-ishの方法があるかどうかを知ることに興味があります。 – ConfusedAgain

答えて

0

私は最終的には、上記のthis、一緒に行きました。私はいくつかの場所でうまく動作しているexec {}を持っており、このユースケースのための最良の選択肢のようです。前述したように

def doMyThing(String target) { 
    exec { 
     executable "something.sh" 
     args "-t", target 
    } 
} 

:このことを意味熱心モデレータを、喜ばせるために

。これにより、同じ究極の機能が提供されます。

0

あなたのタスクは、ファイル名を読み込む必要がある場合は、私が代わりにコマンドを実行するの提供APIを使用することをお勧めします。また、execを使用するとOS固有のものになるため、別のOSで必ずしも移植する必要はありません。ここで

はそれを行う方法は次のとおりです。

task hello { 
    doLast { 
     def tree = fileTree(dir: '/tmp/test/txt') 
     def array = [] 
     tree.each { 
      array << it 
      print "${it.getName()} added to array!\n" 
     } 
    } 
} 
関連する問題