2012-10-02 43 views
5

Tôi có một nhiệm vụ tạo nguồn java và một bộ lọ từ các nguồn này (ví dụ: dự án a). Tôi muốn xuất các lọ này sang các dự án phụ thuộc (ví dụ, dự án b). Vì vậy, đây là khoảng những gì tôi có ngay bây giờ:Gradle - Tôi có thể bao gồm đầu ra của nhiệm vụ trong các phụ thuộc dự án

//a.gradle 

configurations{ 
    generatedJars 
} 

task generateJars(type: JavaExec) { 
    //generate jars ... 

    outputs.files += //append generated jars here 
} 

dependencies{ 
    generatedJars generateJars.outputs.files 
} 


//b.gradle 

dependencies{ 
    project(path: ':a', configuration: 'generatedJars') 
} 

Nó hoạt động OK, ngoại trừ việc thêm generateJars.outputs.files như một sự phụ thuộc không nói gradle rằng nó phải chạy generateJars nhiệm vụ khi không có lọ nào được tạo. Tôi đã thử thêm nhiệm vụ như là một phụ thuộc với hy vọng rằng nó sẽ hoạt động giống như khi bạn thêm một tác vụ jar/zip vào một cấu hình tạo tác (ví dụ artifacts{ myJarTask }), nhưng nó sẽ báo lỗi cho tôi biết rằng tôi không thể làm cái đó. Tất nhiên tôi có thể tiêm các nhiệm vụ generateJars một nơi nào đó trong quá trình xây dựng trước khi :b bắt đầu đánh giá, nhưng đó là vụng về và giòn, vì vậy tôi muốn tránh nó.

Tôi cảm thấy mình nên thêm các lọ được tạo vào artifacts{ ... } của dự án, nhưng tôi không chắc chắn cách làm cho chúng có thể hiển thị với các dự án phụ thuộc. Có cách nào tốt hơn để đạt được điều này?

Dự án phụ thuộc (dự án b) sẽ cần phải thiết lập đường dẫn lớp mô-đun IntelliJ IDEA để trỏ tới các lọ được tạo ra của dự án a. Một cái gì đó chứ không phải như thế này (pseudo-code):

//b.gradle 

idea{ 
    module{ 
    scopes.COMPILE.plus += project(path: ':a', configuration: 'generatedJars').files 
    } 
} 

Cho đến nay tôi đã cố gắng chỉ đơn giản là thêm một dependecy dự án trên :a 's generatedJars trong :b, nhưng Idea Plugin chỉ cần thêm mô-đun :a như một mô-đun-phụ thuộc và giả định rằng nó xuất khẩu các lọ được tạo ra của nó (có lẽ là một giả định chính xác), do đó không thêm các lọ được tạo ra vào classpath của :b.

Bất kỳ trợ giúp nào sẽ được đánh giá rất nhiều!

Trả lời

2

Trước tiên, bạn có cần cấu hình riêng không? Tức là, bạn có khách hàng của a nên không xem các bình được tạo không? Nếu không, bạn có thể thêm các lọ được tạo vào cấu hình archives, điều này sẽ đơn giản hóa mọi thứ.

Thứ hai, cách chính xác để thêm Chum tạo ra để cấu hình là (thay vì khối dependencies):

artifacts { 
    generatedJars generateJars 
} 

này nên chắc chắn rằng nhiệm vụ generateJars được chạy tự động khi cần thiết.

Thứ ba, tôi sẽ bỏ qua += sau outputs.files, mặc dù nó có thể không tạo sự khác biệt. Bạn cũng nên thêm các đầu vào cần thiết.

Thứ tư, tại sao bạn cần một nhiệm vụ JavaExec để tạo ra Lọ? Thay vào đó, bạn có thể thêm các nguồn được tạo vào một số tập hợp nguồn và để Gradle xây dựng chúng không?

Thứ năm, IDEA không có khái niệm tương ứng với phụ thuộc cấu hình dự án của Gradle. Mô-đun IDEA hoàn toàn phụ thuộc vào một mô-đun khác hoặc hoàn toàn không phụ thuộc vào mô-đun. Bạn có hai tùy chọn: sử dụng phụ thuộc vào mô-đun và tạo các nguồn được tạo ra là thư mục nguồn của mô-đun phụ thuộc (tốt nhất là trong Gradle và IDEA build), hoặc truyền các Chum được tạo ra như các phụ thuộc bên ngoài cho IDEA.Trong cả hai trường hợp, bạn có lẽ nên thêm phụ thuộc nhiệm vụ từ ideaModule vào tác vụ tạo thích hợp. Nếu điều này vẫn không dẫn đến một thiết lập IDEA thỏa đáng, bạn có thể nghĩ về việc di chuyển thế hệ của các lọ thành một tiểu dự án riêng biệt.

+0

Cảm ơn. Thêm nhiệm vụ vào các 'artifacts' woks độc đáo trong module, nhưng tôi không thấy làm thế nào tôi có thể tham khảo những jars đó từ dự án' b' (không xuất bản chúng). Có, chỉ có thể tạo nguồn và xuất chúng dưới dạng nguồn mô-đun. Điều này sẽ làm việc, nhưng nó tạo ra thêm công việc cho IDEA, vì vậy tôi đã hy vọng nó có thể được phá vỡ bằng cách nào đó. Để làm cho hooking 'ideaModule -> generateJars' hoạt động tốt, tôi cũng cần thêm' b: ideaModule -> a: ideaModule', và tôi có khoảng 3 mô-đun mà tất cả đều cần làm điều này. Tôi đã hy vọng tôi có thể thiết lập nó cho độ phân giải tự động bằng cách nào đó. – rodion

+0

quảng cáo 1. 'dự án (đường dẫn: 'a', cấu hình: 'generatedJars')' –

+0

quảng cáo 2. Liệu vấn đề "thêm công việc"? (Bạn có thể sử dụng cùng một đối số cho mã không được sinh ra.) Trong mọi trường hợp, bạn có thể biên dịch các tệp bằng Gradle chứ không phải là một nhiệm vụ JavaExec. –

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