의존성 버전 충돌을 피 하시겠습니까?


10

내 항아리를 사용하는 모든 Java 프로젝트는 거의 확실하게 다른 항아리에 대한 추가 종속성을 가지고 있으며 내 항아리에는 종속성으로도 포함됩니다.

문제는 다른 jar에 여러 버전이 있다는 것입니다.

프로젝트의 두 번째 항아리 버전이 내 항아리의 두 번째 항아리 버전과 다른 경우 발생할 수있는 문제를 어떻게 피할 수 있습니까?

사용자가 항아리를 추가하기 위해 멋진 클래스 로딩 트릭을 수행하는 번거 로움을 원하지 않기를 바랍니다.

그 공통 의존성의 가능한 모든 버전에 대해 단지 다른 버전의 항아리를 만들어야합니까? 그런 다음 이미 가지고있는 두 번째 항아리와 동일한 버전을 사용하는 내 항아리 버전을 선택하십시오.

이것을 처리하는 더 똑똑한 방법이 있습니까? 사람들이 내 항아리를 충돌없이 더 쉽게 사용할 수 있습니까?

답변:


10

그것은 당신의 문제 가 아닙니다 . 해결하는 것은 최종 사용자의 책임입니다. 타사 종속성을 사용하는 영역과 함께 제공되므로 계산보다 종속성 충돌을 여러 번 해결해야했습니다. 모든 프로젝트의 특정 종속성 충돌을 수용 할 수는 없습니다.

소프트웨어가 최신 버전의 종속성에서 올바르게 작동해야합니다. 종속성이 모든 릴리스에서 인터페이스를 변경하지 않는 한 다양한 호환성을 가져야합니다 (예 : 소프트웨어는 범위의 모든 버전의 뎁에서 작동 [2.0.0, 3.0.0)). 소프트웨어를 유지 관리하는 한 모든 종속성의 최신 버전과 호환되도록 노력해야합니다.

즉, 내 의존성의 다른 버전으로 소프트웨어를 사용하는 개발자로서 유용하다고 생각하는 것들이 있습니다.

  • 프로젝트와 다른 프로젝트의 통합이 빡빡하면 문서에 호환성 차트가있는 것이 좋습니다. 어쨌든 설명서의 특정 버전의 종속성과 관련된 알려진 문제를 언급해야합니다. 그렇지 않으면 개발자는 시행 착오를 통해 호환 가능한 버전을 찾아야합니다.
  • 인터페이스를 통해 종속성과의 협업을 추상화하고 구현을 종속성 주입으로 대체 할 수 있도록 소프트웨어를 설계하십시오. 따라서 최종 사용자는 귀찮게하지 않고 라이브러리 x 버전과의 통합을 대체 할 수 있습니다.
  • 사용자가 특정 버전의 공통 종속성을 지원하도록 요청할 수 있도록 공개 이슈 트래커가 있어야합니다. 호환되지 않는 버전의 종속성에 대한 지원을 원하는 많은 사용자가있는 경우 두 버전을 모두 게시 할 수 있습니다. 여러 플랫폼을 대상으로하는 이 Maven 예제를 참조하십시오. 서로 다른 버전의 종속성에 대한 지원은 비슷해야합니다.

Java에 .NET의 어셈블리 bindingRedirect App.config 설정과 같은 것이 있습니까? "종속성 Foo v3.0.2를 요청하는 라이브러리는 실제로 Foo v3.0.5를 사용해야하고 v3.0.2 인 것처럼 가장해야합니다"를 지정할 수 있습니까? 나는 11 년 이상 Java를하지 않았으므로 이것을 처리하는 방법에 대한 기억은 사라졌습니다.
존 자브로 스키
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.