2016-06-27 3 views
5

Java 프로젝트를 Ant에서 Gradle로 마이그레이션 중입니다. 최선의 해결책은 Gradle의 다중 프로젝트 지원을 사용하는 것이지만 순환 의존성을 없애는 방법을 찾을 수는 없다고 생각합니다. 까다로운Gradle에서 순환 종속성을 해결하는 방법

- project/ 
    - common/ 
    - product-a/ 
    - product-b/ 

관계 product-a, common 사이 및 product-b :

원래 프로젝트

이 레이아웃을 갖도록 설정 하였다. common은 구성 파일에 따라 product-a 또는 product-b에 따라 다릅니다. 마찬가지로 product-aproduct-b은 구성 속성에 관계없이 common에 따라 다릅니다. product-aproduct-b은 동시에 빌드되지 않습니다.

나는 빠른 솔루션이 project/build.gradle이 같은 것을 사용하는 것입니다 생각 :

project(':product-a') { 
    dependencies { 
     compile project(':common') 
    } 
} 

project(':product-b') { 
    dependencies { 
     compile project(':common') 
    } 
} 

다음, 난 그냥 product-a에 대한 작업이 가까이 얻을 수있는 방법을 것에 대해 생각했다. 그 덕분에 다음과 같이 나타났습니다.

project(':common') { 
    dependencies { 
     compile project(':product-a') 
    } 
} 

순환 의존성이있는 경우 예외가 발생합니다.

내가 commonproduct-a/product-b 또는 다형성을 사용하여 예상되는 클래스의 인터페이스를 설정하여 product-aproduct-b 리팩토링 고려했지만, 나는 그 중 하나가 앞으로 이동하기 전에, 이것을 달성하기 위해 더 나은 방법이 요람? 나는 아직이 기술적 빚을 없앨 준비가되어 있지 않다.

답변

5

빌드 트릭을 사용하면 순환 종속성을 제거 할 수 없습니다. 더 이상 순환 종속성이 없도록 모듈을 리팩토링해야합니다. 모듈 이름과 다른 정보가 없으면 "product- *"에 의존하는 "공통"부분을 추출하여 새 모듈에 넣고 싶을 것입니다.

관련 문제