2014-09-06 3 views
45

그래서 지금은 도서관 프로젝트가 있습니다. Foo 프로젝트는 OkHttp과 같은 라이브러리에 따라 다릅니다.AAR에 전이 의존성이 포함될 수 있습니까?

이제 Foo에는 AAR을 생성하고 공개 장소로 푸시하는 메이븐 빌드 단계가 있습니다.

이제 프로젝트 B가 있다고 가정 해 보겠습니다. Bar이라고 부릅니다. Bar는 Android 애플리케이션이며 BarFoo에 따라 다릅니다.

음, 저기 있습니다.

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

그래서, 그런 일이 가능 : 나는 OkHttp 호출 Bar에서 Foopublic static 함수를 호출 할 때, 나는이 메시지가? 또는 Bar은 수동으로 OkHttp에 의존해야하며 다른 종속성은 Foo에 있습니까?

답변

40

그래서 조금 시간이 걸렸지 만 찾고 있던 것을 발견했습니다. 방금 내가 수색을하는 방식이었습니다.

이 덜 보이는 대답은 내가 찾던 정확히 무엇을 :

Transitive dependencies not resolved for aar library using gradle

을 기본적으로 나는

바의 build.gradle에

transitive = true 

을 추가 할 필요

예 :

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

이렇게하면 모든 전이 라이브러리가 포함됩니다.

그러나 실제로는 'exclude'태그를 사용하여 해결할 수있는 종속성 (특히 로컬 인스턴스)간에 충돌이 발생할 수 있습니다.

+2

나는 그 방법을 많이 따르지 않고있다. 따라서 이전에 설명 된 방법에 따라 다음과 같이 설정해야합니다. 'compile ('com.my:library:[email protected]') { transitive = true }'그러나 최종 라이브러리를 가져올 때 내 프로젝트, 전이 lib가 없습니다. 계속 진행하는 방법에 대한 단서가 없다. –

+13

@MichaelKnight flatDir을 사용하여 로컬 파일로 aar를 포함하는 경우 aar에 전이 종속성이 없으므로 수동으로 포함시켜야합니다. 그러나, 예를 들어, maven repo에서 aar를 가져 오는 중이라면 라이브러리는 (pom 파일에서) 어떤 의존성을 사용하는지에 대한 설명을 가지고 있으며, gradle이 자동으로 가져올 수 있습니다. – NazarK

+0

@MichaelKnight는 나를 위해 작동하지 않습니다. –

관련 문제