우선, 원시 코드가 닫혀 있고 전체 빌드 프로세스가 좀 더 복잡하기 때문에 가상 코드에서 문제를 보여 드려 죄송합니다.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를 할 수 없습니다
저장소 B에서 메타 데이터의 종속성은 무엇입니까? 메타 데이터에도 D가 없습니까? 그렇지 않다면 왜 그렇습니까, 그렇다면 A는 저장소에서 B를 사용할 때 어디에서 가져 옵니까? – Vampire
안녕하세요, 감사합니다. 당신은 나를 올바른 방향으로 인도합니다. 리포지토리의 라이브러리 B는 CI의 일반적인 jar 작업 대신 fatJar 작업을 사용하여 빌드됩니다. 이 fatJar에는 메타에 누락 된 전이 라이브러리가 포함되어 있습니다. 이제 어떻게 든 "includeBuild"복합 빌드 구문과 함께 누락 된 libs를 포함 할 수 있는지 알아야합니다. 불가능하다면 ProjectA에 의존성을 추가해야 할 것입니다. – TardigradeX
음, 종속성은 includeBuild와 함께 있습니다. A는 알고있는 저장소에 없기 때문에 그냥 찾지 않습니다. Btw. fatJars는 특히 종속성으로 사용하기 위해 악취가납니다. 전이 종속성을 관리하려면 Gradle, Ant/Ivy 또는 Maven과 같은 적절한 빌드 도구를 사용하십시오. – Vampire