2017-11-29 29 views
0

우선, 원시 코드가 닫혀 있고 전체 빌드 프로세스가 좀 더 복잡하기 때문에 가상 코드에서 문제를 보여 드려 죄송합니다.Gradle Composite 빌드, 전 이적 종속성이 해결되지 않았습니다.

우리는, 우리는 C와 D를 호출 지금 B.이 도서관은 여러 오픈 소스 라이브러리를 사용하는 실내 라이브러리를 사용하는 프로젝트 A를 가지고 다음과 같이

문제는. 디버깅 목적

은 내가 Gradle을 복합은, includeBuild를 사용하여 라이브러리 B를 포함하는 프로젝트 A,의 구축 만들려고합니다.

프로젝트 A : settings.gradle

rootProject.name = 'A' 

includeBuild '../B' 

프로젝트 A는 그 build.gradle 라이브러리에 B를 포함

repositories { 
    mavenCentral() 
} 

dependencies { 
     compile group: 'bgroup', name: 'b', version: '1.0' 
} 

라이브러리 B 종속성으로 C 및 D를 갖는다. D에는 자체 저장소가 있으며 C는 MavenCentral에 있습니다.

도서관 B의 build.gradle는 :

repositories { 

    maven { 
    url "http://D-Repository/maven" 
    } 

    mavenCentral() 
} 

dependencies { 
     compile group: 'dgroup', name: 'd', version: '1.0' 
     compile group: 'cgroup', name: 'c', version: '1.6' 
} 

나는 문제없이 build.gradle 파일을 사용하여 라이브러리 B를 컴파일 할 수 있습니다. 하지만 프로젝트 (A)의 합성 빌드를 컴파일 할 때, 그것은 말한다 :

가 DGROUP 찾을 수 없습니다 : D : 1.0

내가 라이브러리 C를 해결 않습니다 하지만 D. 프로젝트 A의 build.gradle 파일에 D의 저장소를 추가하여 작동하게해야합니다. D의 build.gradle의 저장소를 포함

프로젝트 A :

repositories { 
    maven { 
     url "http://D-Repository/maven" 
    } 

    mavenCentral() 
} 

dependencies { 
     compile group: 'bgroup', name: 'b', version: '1.0' 
} 

그래서 나는 A가 직접 종속성으로 사용하지 않는 경우에도, D의 저장소를 추가해야합니다.

  • 이 예상되는 동작입니까?
  • 일부 구성이 누락 되었습니까? 프로젝트 A에 작업하는 동안 난 그냥 우리 자신의 저장소에서 라이브러리 B (NO 합성 빌드)를받을 경우

, 나는 A를 프로젝트 D의 저장소를 추가 할 필요 없다 그러나이 방법 나는 디버그 B를 할 수 없습니다

+0

저장소 B에서 메타 데이터의 종속성은 무엇입니까? 메타 데이터에도 D가 없습니까? 그렇지 않다면 왜 그렇습니까, 그렇다면 A는 저장소에서 B를 사용할 때 어디에서 가져 옵니까? – Vampire

+0

안녕하세요, 감사합니다. 당신은 나를 올바른 방향으로 인도합니다. 리포지토리의 라이브러리 B는 CI의 일반적인 jar 작업 대신 fatJar 작업을 사용하여 빌드됩니다. 이 fatJar에는 메타에 누락 된 전이 라이브러리가 포함되어 있습니다. 이제 어떻게 든 "includeBuild"복합 빌드 구문과 함께 누락 된 libs를 포함 할 수 있는지 알아야합니다. 불가능하다면 ProjectA에 의존성을 추가해야 할 것입니다. – TardigradeX

+0

음, 종속성은 includeBuild와 함께 있습니다. A는 알고있는 저장소에 없기 때문에 그냥 찾지 않습니다. Btw. fatJars는 특히 종속성으로 사용하기 위해 악취가납니다. 전이 종속성을 관리하려면 Gradle, Ant/Ivy 또는 Maven과 같은 적절한 빌드 도구를 사용하십시오. – Vampire

답변

2

주석에서 알 수 있듯이 게시 된 B는 종속성 클래스가 포함 된 멀리있는 JAR입니다. 복합 빌드를 사용하는 경우 일반적인 전이 종속성 해결 방법이 사용됩니다. fat JAR을 의존성으로 사용하는 것은 매우 나쁜 습관이다.

팻 JAR의 복합 빌드 대체에 의존한다면, 적절한 의존성 선언이 있지만 A는 알고있는 리포지토리에서 찾을 수 없으므로 A를 찾을 수 없습니다. B에 대한 종속성을 포함 된 빌드의 fatJAR로 바꾸거나 적절한 전 이적 종속성 처리 방법을 사용하도록 전환해야합니다.이것은 정상적인 B JAR을 게시하는 것이지만 종속성을 선언하고 D 특정 저장소를 A에 추가하는 올바른 메타 데이터를 사용하여 전 이적 종속성을 해결할 수 있습니다.