2014-02-27 20 views
2

저는 최근 Gradle에서 모든 빌드/릴리스 엔지니어링 작업을 구현하도록 지시 받았습니다.Gradle 파일 컬렉션의 각 파일에 대해 셸 명령을 실행하는 방법은 무엇입니까?

그래서 나는 Gradle을 처음 접했고 쉘 프롬프트에서 잘 보이지 않는 것들은이 용감한 새로운 세계에서 짐작하기가 어렵습니다.

내 빌드는 jar 파일 세트를 작성합니다.

나는 그들 각각에 대해 유사

뭔가 쉘 작업을 실행해야합니다

task findBugs (type:Exec, dependsOn: fb23) {commandLine 'java', '-jar', 
'./findBugs/findbugs.jar', '-textui', '-progress', '-xml', '-output', 
'TrustManagerService.xml', 'TrustManagerService.jar'} 

(내가 FindBugs 플러그인 우리가 JDK8에이기 때문에 usethe 수 없습니다 - 그래서

FileTree iotTree = fileTree(dir: '.') 
iotTree.include '*.jar' 
iotTree.each { 
File file -> println file.name 
println 'A file' 
} 
: '

내가 파일 수집을 얻을 같은 것을 사용하여 파일 이름을 반복 할 수 있습니다) ... 미리보기 버전에서 외부 FindBugs를 실행 해요

또는

def iotJars = files(file('./jars').listFiles()) 
println '' 
println iotJars 
iotJars.each { File file -> println 'The next file is: ' + file.name } 

하지만 반환 된 각 파일 이름을 쉘 명령을 실행하는 방법을 볼 수없는 내 인생에 대한

...이 작업을 수행 할 수있는 가장 간단한 방법에

생각? 내가 그들에게 휴식 ... :(

+0

참조 : http://www.gradle.org/docs/current/userguide/working_with_files.html –

답변

8

당신은을 사용할 수 있습니다 얻을 돌아가 각 라인에 CR을 추가했다 - 어떤 코드 샘플에서 줄 바꿈을 포함하는 가장 좋은 방법입니다 - 그런데

Stringexecute 방법은 쉘 명령을 실행하려면 여기를

는 예를 들어 작업이다.

task executeExample << { 
    FileTree ioTree = fileTree(dir: ".") 
    ioTree.each { f -> 
    def proc = "ls -l ${f}".execute(); 
    proc.waitFor(); 
    println "return code: ${ proc.exitValue()}" 
    println "stderr: ${proc.err.text}" 
    println "stdout: ${proc.in.text}" 
    } 
} 
+0

I 이 건축물을 사용할 수 있기를 좋아하지만, 더 복잡한 것도 있습니다. x보다는 ls, 등등. 나는 모든 종류의 파싱 오류를 얻는다. –

+0

예 : def cmdLine = 'java -jar ./findBugs/findbugs.jar -textui -progress -xml -output FBJars /'+ baseName + '.xml FBJars /'+ baseName + '.jar'.execute() - 큰 따옴표를 사용하거나 사용하지 않고 큰 따옴표를 사용하면 오류가 발생합니다 ... –

+0

먼저 문자열 변수에 명령을 할당 한 다음 변수의 println을 수행하십시오. 어떻게 보이는지 보아라. 괜찮 으면 변수에 대해 execute를 사용해보십시오. – ditkin