2013-08-11 34 views
15

Tôi đang soạn thảo một dự án Groovy với Gradle, nhưng tôi đã nhận thấy rằng khi tôi sử dụng chú thích @Grab trong mã của tôi, tôi nhận được lỗi sau:Lỗi biên dịch một dự án sử dụng Groovy @Grab chú thích

 
$ gradle compile 
:buildInfo 
:compileJava UP-TO-DATE 
:compileGroovy FAILED 

FAILURE: Build failed with an exception. 

* What went wrong: 
Execution failed for task ':compileGroovy'. 
> org/apache/ivy/core/report/ResolveReport 

(full stack trace đây http://pastebin.com/0ty4jNct)

tôi đã phát hiện ra rằng cách duy nhất để có được nó làm việc là để thêm 'groovy' và 'ivy' module để các groovy classpath, nhưng tôi muốn tránh điều này, vì đường dẫn lớp học groovy không còn được dùng nữa.

Đây có phải là lỗi Gradle không? hoặc có cách nào tốt hơn để quản lý sự phụ thuộc của @Grab?

Trả lời

23

@Grab có nghĩa là được sử dụng cho các tập lệnh độc lập không được biên dịch trước và bạn thường không sử dụng nó cùng với mã được biên dịch. Nếu bạn làm thế, bạn có thể phải thêm Ivy vào groovyClasspath. Một cái gì đó như:

repositories { 
    mavenCentral() 
} 

configurations { 
    ivy 
} 

dependencies { 
    ivy "org.apache.ivy:ivy:2.3.0" 
    compile "org.codehaus.groovy:groovy-all:2.1.5" 
} 

tasks.withType(GroovyCompile) { 
    groovyClasspath += configurations.ivy 
} 

Điều đó nói rằng, cách tiếp cận tốt hơn là quản lý các phụ thuộc với Gradle.

+0

Hi, tôi nghĩ bạn có nghĩa là: 'configure {ivy}' và sử dụng nó trong khối 'dependencies', nhưng nó trả về' Không thể suy ra đường dẫn lớp Groovy vì không có Groovy Jar được tìm thấy trên đường dẫn lớp: configuration ': compile'' – pditommaso

+0

Right. Và tất nhiên bạn sẽ phải khai báo một sự phụ thuộc Groovy. –

+1

Có thể có một tập lệnh "Groovy" có thể chạy cả hai độc lập (với '@ Grab') cũng như trong ngữ cảnh Maven? – MarkHu

0

Giải pháp được chấp nhận làm việc cho tôi vào thời gian biên dịch, nhưng tôi vẫn gặp sự cố tương tự khi chạy. Sau đây làm việc cho tôi bằng cách loại trừ các mã nho từ biên dịch hoàn toàn:

compileGroovy { 
    groovyOptions.configurationScript = file("gradle/config.groovy") 
} 

... nơi gradle/config.groovy là một file riêng biệt, nội dung trong đó là:

withConfig(configuration) { 
    configuration.setDisabledGlobalASTTransformations(['groovy.grape.GrabAnnotationTransformation'] as Set) 
} 
Các vấn đề liên quan