2012-11-20 33 views
14

Tôi có một nhiệm vụ chạy một JavaExec đơn giản.Làm thế nào để thực thi JavaExec nhiều lần trong một tác vụ bằng Gradle?

Điều tôi không thể làm là khả năng chạy JavaExec nhiều lần trong khi lặp lại đối tượng Filetree (chứa các tệp) mỗi khi tôi muốn chuyển từng lớp JavaExec chính. Thật không may trình biên dịch hoặc công cụ tạo mã vì nó không chấp nhận một thư mục như là một arg vì vậy tôi cần phải vượt qua các tập tin như một arg mỗi vòng lặp. Dưới đây là những gì tôi có:

task generateClasses(type: JavaExec) { 
    description = 'Generates Json Classes...' 
    classpath configurations.all 
    main = "org.apache.gora.compiler.Compiler" 
    FileTree tree = fileTree(dir: 'src/main') 
    tree.include '**/*.json' 
     tree.each {File file -> 
     println file 
     args = [ "src/main/json/$file.name", "$buildDir/generated-src/src/main/java" ] 
    }  

}

compileJava.source generateClasses.outputs.files, sourceSets.main.java

Từ trên nó hoạt động và tôi nhận được tất cả các file được liệt kê nhưng JavaExec là được gọi là chỉ một lần trên tập tin cuối cùng đọc.

Làm cách nào để giải quyết vấn đề trên? Hãy giúp tôi.

+0

Rõ ràng là phá vỡ các công việc riêng biệt và chạy JavaExec n lần sẽ là một giải pháp nhưng điều này làm cho tệp xây dựng quá dài và không linh hoạt (tôi phải chỉ định đường dẫn đến từng tệp). – user983022

Trả lời

23

Cách sử dụng phương thức project.javaexec? Xem API Documentation hoặc DSL ref.

task generateClasses { 
    description = 'Generate Json Classes' 
    fileTree(dir: 'src/main', include:'**/*.json').each { file -> 
    doLast { 
     javaexec { 
     classpath configurations.all 
     main = 'org.apache.gora.compiler.Compiler' 
     args = ["src/main/json/$file.name", "$buildDir/generated-src/src/main/java"] 
     } 
    } 
    } 
} 
Các vấn đề liên quan