2010-11-19 3 views
21

maven pom에서 찾을 수있는 모든 전이 의존성을 제거하는 것이 좋습니다.Maven : 전환 의존성 인 선언 된 종속성을 유지하거나 제거해야합니까?

예 :
내 프로젝트가
B A와 B에 따라 내 치어에서 B를 유지하거나 제거해야 또한 A.
의 이적 종속인가?

무엇이 가장 좋을까요 :
pom에 선언되었거나 최상위 수준의 항아리 만 유지하고있는 알려진 모든 항아리를 가지고 있습니다.

이것은 다소 주관적이지만 많은 전이 의존성이있는 거대한 부모 (부모 및 자식)를 정리하려고합니다. 나는 가능한 한 단순하게 움푹 들어가게하고 싶다. 그러나 나는 또한 그들이 유지할 수 있기를 바란다.

답변

19

프로젝트가 B에 직접적인 종속성이있는 경우 B가 A의 전이 종속성 인 경우에도 유지해야합니다. 다음 버전 A에서는 B를 사용하지 않을 수 있으므로 pom을 다시 구성해야합니다 .xml.

일반적으로 Maven 종속성은 논리적 프로젝트 종속성을 반영해야합니다.

+0

답변과 링크를 제공해 주셔서 감사합니다. 나는이 충고를 좋아한다. '논리적 인 프로젝트 의존성 반영' – Guillaume

+0

내부 의존 관계와 외부 의존성을 구별해야한다고 생각하지 않습니까? 나는 비슷한 질문을했다 : http://stackoverflow.com/questions/20800571/are-there-any-reasons-to-keep-explicit-dependency-declaration-for-my-own-transit 나는 여전히 이유를 볼 수 없다. 왜 내가 내 모듈 사이의 모든 의존성을 선언 하느냐에 귀찮게해야한다. API가 변경되고 프로젝트를 컴파일하지 못하면 해결할 것이고 코드 유지 관리가 향상 될 것입니다. –

+0

링크가 질문/답변과 어떤 관련이 있습니까? –

11

나는 는 이적 종속의 선언을 피하기에 선호하고, 명시 적으로 그것을위한 좋은 이유가있는 경우를 pom으로에 포함됩니다.

  • 내가 시도가 가능 단순하게 치어 유지 : 여기 내 인수입니다. 이행 종속성을 선언하면 명시 적으로 사용하더라도 Maven pom이보다 장황 해집니다. (당신이 명시 적으로 필요한 경우에도) 이적 종속성을 선언함으로써

:이 정보는 유물의 치어 기술자에 이미 있기 때문에 선언에

  • 중복이 도입된다 필요합니다. 유물의 새 버전이 더 이상 transitive dependency에 의존하지 않는를 필요한 경우

  • , 당신은 그 transitive dependency가 명시 적으로 선언 된 경우, 어셈블리에서 자신을 transitive dependency을 제거해야합니다.

  • 전 이적 종속성을 명시 적으로 선언하여 전 이성 정보를 조작 할 수 있습니다.

은 다음과 같은 경우에 명시 적으로 종속 관계를 포함하는 것이을 만들 것 :

  • 을 당신은 한 두 개의 종속성이 이적 의존성 B의 다른 버전을 (요구하는, CD 말 또는 프로젝트에 특정 버전의 B이 필요합니다.이 경우 B 버전을 선택하고 이행 종속성 T을 명시 적으로 정의해야합니다. (*)

결론 : 나는 그것을 구체적 이슈를 선언하는 의미가하지 않는 한, 선언을 피하려고 것 (경우처럼 (*)).

+0

비슷한 토론에 참여하려면 http://stackoverflow.com/questions/20800571/are-there-any-reasons-to-keep-explicit-dependency-declaration-for-my-own-transit –

관련 문제