2014-07-26 27 views
25

có thể chỉ định phụ thuộc trong Gradle (trong studio android) cho một dự án gradle khác ngoài ranh giới dự án hiện tại không? Ví dụ với một con đường một cái gì đó tương đối như thế này:Phụ thuộc gradle: dự án biên dịch theo đường dẫn tương đối

dependencies { 
    compile project('../../stdlib/dagger') 
} 

Vì vậy, những gì tôi Trie là một cái gì đó như thế này:

Tôi có một ứng dụng Android. Cấu trúc trông như thế này:

  • MyApp (đường dẫn là/Users/foo/workspace/MyApp)
    • ứng dụng (đường dẫn là/Users/foo/workspace/MyApp/app)

Và tôi có một dự án thư viện android gradle chứa 3 submodules:

  • stdlib (đường dẫn là/Users/foo/workspace/stdlib)
    • dao găm (đường dẫn là/Users/foo/workspace/stdlib/dao găm)
    • utils (đường dẫn là/Users/foo/workspace/stdlib/utils)
    • http (đường dẫn là/Users/foo/workspace/stdlib/http)

những gì tôi muốn là để biên dịch các dao găm, utils, mô-đun http vào dự án MyApp.

Các mô-đun thư viện stdlib đang được phát triển mạnh và sẽ phát triển khi MyApp phát triển. Do đó tôi không muốn đẩy chúng vào một kho lưu trữ maven mỗi khi tôi thực hiện một chút thay đổi.

Vì vậy, có khả năng liên kết các dự án gradle khác bằng cách nào đó không? Im tìm kiếm một giải pháp tạm thời. Tôi sẽ đẩy thư viện std vào kho lưu trữ maven khi nguồn ổn định.

Ngoài ra, như giải pháp thay thế, một giải pháp với sourceSet sẽ là có thể. Tôi cũng đã xem xét để thực hiện một thư viện thư mục trong MyApp là người symlink đến stdlib, nhưng tôi didnt cho nó hoạt động như mong đợi:

  • MyApp (đường dẫn là/Users/foo/workspace/MyApp)
    • ứng dụng (đường dẫn là/Users/foo/workspace/MyApp/app)
    • thư viện (liên kết tượng trưng đến/Users/foo/workspace/stdlib)
dependencies { 
     compile project(':libraries:dagger') 
    } 

Bất kỳ ý tưởng nào về cách giải quyết sự phụ thuộc như vậy trong gradle?

Trả lời

67

Bạn có thể bao gồm mô-đun dự án gốc bên ngoài bằng cách sử dụng tệp 'settings.gradle' từ dự án chính của bạn. Nó phải là một dự án gradle quá và trong tình hình xây dựng Android cụ thể, bạn phải cấu hình tất cả các module như là một dự án "android-library" plugin.

Ví dụ, trong dự án 'MyApp' settings.gradle bạn có thể thử này:

include 'app' 
include 'dagger' 
project(':dagger').projectDir = new File('/Users/foo/workspace/stdlib/dagger') 

của bạn 'MyApp' build.gradle phải phản ánh nhu cầu của 'dao găm' mô-đun trong một đường dẫn tương đối Gradle cách :

dependencies { 
    compile project(':dagger') 
} 

Và đó là nó. Lặp lại bước này với mọi mô-đun bên ngoài bạn cần và bạn sẽ có cấu hình đa dự án Gradle phù hợp.

+1

Hoàn hảo, cảm ơn! – sockeqwe

+0

khi tôi thử điều này tôi nhận được một 'Một vấn đề xảy ra đánh giá dự án': tài khoản '. > Không thể lấy thuộc tính 'compileSdkVersion' trên thuộc tính mở rộng thêm vì nó không tồn tại tài khoản' ** là dự án bên ngoài của tôi ** –

+4

nó hoạt động hoàn hảo, nhưng tôi tự hỏi tại sao '' 'include 'dagger''''không có dấu hai chấm, trong khi '' 'project (': dagger'). projectDir''' có dấu hai chấm? – howerknea

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