2016-08-16 2 views
0

나는 이것을 하루 반 정도 고심하고있다. taskdef 또는 내가하고 싶은 scriptdef 즉 할 수Gradle에서 Ant taskdef와 동일한 것은 무엇입니까?

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

runexe 다른 곳

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

로 선언도있을 수 있습니다 : 나는 Gradle을에서 다음과 개미의 개념을 복제하기 위해 노력하고있어 재사용 가능한 미리 정의 된 코드 블록을 호출하고 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을 실행할 수 없도록합니다. 나는 executable, argscommandLine으로 광범위하게 실험했습니다. 나는 exec으로 놀았으며 여기 저기에 여러 가지 변형을 시도했습니다. 나는 또한 Gradle 사이트에서 제공되는 무료 서적을 사용하고 있습니다.

디렉토리에서 파일 목록을 읽고 각 파일을 다른 인수로 응용 프로그램에 전달해야합니다. 실행 시간까지 파일 목록을 알 수 없으므로 스크립트가 파일을 읽을 때까지 목록이 달라질 수 있으며 호출을 반복해야합니다.

가장 좋은 옵션은 현재 here인데, 괜찮 으면 좋겠지 만 더 나은 방법이 있어야합니다. 나는 일을 한 번 불러야한다는 것을 이해하고 다른 일 안에서 일을 부르거나 하나의 매개 변수를 전달할 수는 없다는 것을 이해합니다. 그러나 이것에 대한 올바른 접근법이 Gradle에서 무엇인지 알고 싶습니다. 나는 이것이 웹 전반에 걸쳐 자주 묻는 질문이기 때문에 Gradle 디자이너 중 한 명은 나를 계몽 할만큼 친절 할 것으로 기대하고 있으며 나는 아직 명확한 대답이나 내가 할 수있는 해결책을 찾지 못하고있다.

+0

거들 디자인에 의해, 엄청나게 유연합니다. 마지막 단락에서 언급 된 링크에서 사용 된 기술은 나에게 잘 보입니다. 즉 모든 것이 과제가되어야합니다. 메소드를 정의하는 것이 좋습니다. –

+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" 
     } 
    } 
} 
관련 문제