2013-03-23 41 views
22

Tôi cần viết một số bộ xử lý chú thích. Tôi tìm thấy this blog post đề cập đến cách thức có thể thực hiện trong cài đặt chung và với Eclipse.Tích hợp bộ xử lý chú thích với Gradle

Tuy nhiên tôi đang sử dụng IntelliJ IDEA và Gradle và muốn có cách tiếp cận tốt hơn (như trong, ít tẻ nhạt) hơn để làm điều đó. Những gì tôi đang tìm kiếm:

  1. Tôi có thể viết cả bộ xử lý chú thích và mã sẽ tiêu thụ chúng trong cùng một dự án và Gradle sẽ xử lý thêm bộ xử lý vào đường dẫn lớp và gọi chúng bằng javac tại approrpiate sân khấu.
    HOẶC
  2. Nếu không thể thực hiện được ở trên và tôi phải tạo hai dự án riêng biệt, thì ít nhất có thể giữ chúng trong cùng một kho lưu trữ git. Gradle nên xử lý việc xây dựng liền mạch.
    HOẶC
  3. Nếu không thể và tôi phải tạo hai kho lưu trữ git riêng biệt, thì ít nhất, Gradle nên xử lý những điều được đề cập trong bài đăng liên kết trên blog một cách liền mạch mà không cần can thiệp thủ công.

Kỹ năng git và Gradle của tôi là cấp độ mới bắt đầu. Tôi sẽ đánh giá cao bất kỳ sự giúp đỡ nào với nhiệm vụ này. Cảm ơn bạn.

+1

Tìm kiếm giải pháp cho tùy chọn 1. – Avik

Trả lời

6

Có, có thể di chuyển bộ xử lý sang mô-đun riêng và sử dụng nó từ mô-đun khác (xem querydslapt bên dưới).

tôi sẽ đề nghị bạn để thực hiện riêng bạn AbstractProcessor

và sử dụng nó như thế:

dependencies { 
    .... 
    // put dependency to your module with processor inside 
    querydslapt "com.mysema.querydsl:querydsl-apt:$querydslVersion" 
} 

task generateQueryDSL(type: JavaCompile, group: 'build', description: 'Generates the QueryDSL query types') { 
    source = sourceSets.main.java // input source set 
    classpath = configurations.compile + configurations.querydslapt // add processor module to classpath 
    // specify javac arguments 
    options.compilerArgs = [ 
      "-proc:only", 
      "-processor", "com.mysema.query.apt.jpa.JPAAnnotationProcessor" // your processor here 
    ] 
    // specify output of generated code 
    destinationDir = sourceSets.generated.java.srcDirs.iterator().next() 
} 

Bạn có thể tìm thấy đầy đủ các ví dụ here

9

Một giải pháp (theo ý kiến ​​của bụi của tôi) có thể có hai subprojects và sau đó chỉ cần tạo một bộ chứa các bộ xử lý chú thích là sự phụ thuộc của bộ xử lý chính. Vì vậy, cho hai thư mục với các tiểu dự án của bạn: coreannotation-processors trong thư mục gốc của dự án của bạn, bạn sẽ cũng cần phải có một tập tin settings.gradle như sau:

include 'core' 
include 'annotation-processors' 

Và sau đó trong file gradle cho dự án cốt lõi:

dependencies { 
    compile project(':annotation-processors') 
} 

Điều đó sẽ thực hiện và bạn sẽ không phải xử lý các tác vụ biên dịch tùy chỉnh và đường dẫn lớp của họ.

+0

có, bạn nói đúng. Trong ví dụ của tôi "querydsl-apt" nên được thay thế bởi một số tiểu dự án –

+3

'chú thích-xử lý' phải chứa tệp src/main/resources/META-INF/services/javax.annotation.processing.Processor có tham chiếu tới bộ xử lý của bạn. – FeelGood

+0

Điều này chỉ hoạt động tốt miễn là 'core' và' annotation-processors' không phải là một phần của thư viện, vì gradle vẫn không hỗ trợ đệ quy (chỉ có thể sử dụng một 'settings.gradle'). –

Các vấn đề liên quan