2014-09-06 39 views
45

Vì vậy, ngay bây giờ tôi có một dự án Thư viện, nói dự án Foo phụ thuộc vào thư viện như OkHttp.AAR có thể bao gồm các phụ thuộc transitive không?

Bây giờ, Foo có bước xây dựng maven tạo ra AAR và đẩy nó lên nơi công cộng.

Vì vậy, bây giờ cho phép nói rằng tôi có dự án B, chúng tôi sẽ gọi nó là Bar. Thanh là ứng dụng Android và Bar tùy thuộc vào Foo.

Vâng, tôi có điều đó. Tuy nhiên, khi tôi thực hiện một cuộc gọi đến một hàm public static trong Foo từ Bar mà các cuộc gọi OkHttp, tôi nhận được tin nhắn này:

java.lang.NoClassDefFoundError: com.squareup.okhttp.OkUrlFactory 
      at com.foo.sdk.utils.OkHttpStack.<init>(OkHttpStack.java:15) 

Vì vậy, là một điều như vậy có thể? Hoặc sẽ Bar cần phải tự phụ thuộc vào OkHttp cũng như bất kỳ phụ thuộc nào khác Foo có?

Trả lời

40

Vì vậy, phải mất một chút thời gian nhưng tôi đã tìm thấy những gì tôi đang tìm kiếm. Nó chỉ xảy ra là cách tôi đã từ ngữ tìm kiếm của tôi.

câu trả lời ít thấy này đã được chính xác những gì tôi đang tìm kiếm:

Transitive dependencies not resolved for aar library using gradle

Về cơ bản, tôi cần thêm một

transitive = true 

đến build.gradle của Bar

ví dụ:

compile ('com.foo:FOO:[email protected]'){ 
     transitive=true 
} 

Bằng cách này, nó bao gồm tất cả các thư viện chuyển tiếp của tôi.

Lưu ý, tuy nhiên, điều này thực sự có thể gây xung đột giữa các phụ thuộc (đặc biệt là các địa phương) có thể được giải quyết bằng cách sử dụng thẻ 'loại trừ'.

+2

Tôi đang theo dõi cách tiếp cận đó mà không thành công nhiều. Theo phương pháp được giải thích trước đây, cài đặt của tôi phải như sau: 'biên dịch ('com.my:library:[email protected]') { transitive = true }' Nhưng khi tôi nhập thư viện cuối cùng vào dự án của tôi, lib chuyển tiếp bị thiếu. Tôi không có đầu mối về việc làm thế nào để tiến hành, bất kỳ ý tưởng? –

+13

@MichaelKnight Nếu bạn bao gồm aar là tệp cục bộ bằng flatDir thì điều đó có nghĩa là aar không chứa phụ thuộc transitive, bạn nên bao gồm chúng theo cách thủ công. Tuy nhiên, nếu bạn đang tìm nạp aar từ, ví dụ, repo maven, thì thư viện sẽ mô tả những phụ thuộc mà nó đang sử dụng (trong tệp pom) và gradle có thể tự động tìm nạp chúng cho bạn. – NazarK

+0

@MichaelKnight không hoạt động đối với tôi –

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