Java 라이브러리 용 jar 파일을 만들려고합니다 (이 mylibrary를 호출 할 수 있음). mylibary에는 maven으로 빌드 된 많은 종속성이 있습니다. 예를 들어, mylibrary가 foo라는 jar에 의존하고 mylibrary가 foo의 버전 1.1을 사용한다고 가정 해보십시오.다른 버전과의 종속성 버전 충돌이없는 jar 파일을 만드는 방법 n
다른 사람들에게이 자바 라이브러리를 공개하고 싶습니다. 그들은 내 라이브러리에 링크하고 그것이 제공하는 API를 사용할 것입니다.
사용자가 자신의 프로젝트를 빌드 (해당 라이브러리를 호출 할 수 있음) 할 때 foo 버전 1.2를 사용한다고 가정하십시오. 따라서 해당 프로젝트에는 두 가지 종속성이 있습니다. mylibrary 1.0 foo 1.2 mylibrary가 foo 1.1을 사용하고 theirlibrary가 foo 1.2를 사용하고 일반적으로 작동하지 않기 때문에 jar 버전 충돌이 발생합니다.
이 문제를 해결하기 위해 maven에서 특수 빌드 타겟을 사용할 수 있습니까? 즉, mylibrary의 모든 내용이 하나의 jar 파일로 묶이고 mylibrary jar 파일 내에 다른 클래스 만로드 할 수 있습니다.
그리고 mylibrary jar에서로드되는 클래스는 mylibrary가 공개하고자하는 API 만 포함하고 종속성은 포함하지 않습니다. 사용자가 foo 1.2를 사용하고 싶다면 자유로이 할 수 있습니다.
기본적으로 mylibrary 1.0은 foo 1.1을 theirlibrary에 강제 적용하지 않습니다. theirlibrary는 foo 1.2를 원할 경우 자유롭게 사용해야합니다.
솔루션으로 ClassLoader를 살펴 봤지만 이것이 효과가 있다고 생각하지 않습니다. 클래스 로더는 클래스의 인스턴스 작성자 만 제어 할 수 있도록하는 것처럼 보입니다. 나는. theirlibrary는 ClassLoader를 사용하여이 문제를 해결할 수 있지만 mylibrary에서 할 수있는 일이 많지 않다고 생각합니다. 나는 그들의 라이브러리에서 클래스 로더를 사용하도록 강요하고 싶지 않다.
자바로 가능합니까? 아니면 자바의 단점입니까?
mylibrary의 구현에서 foo 버전을 선택하지 못하게합니까? 나는이 솔루션이 내가 건너 뛰었을 때 상당히 효과적이라고 생각하지 않는다. mylibrary는 theirlibrary가 변경하면 1.1 대신 1.2 버전을 사용하게됩니다. 옳은? 도움을 주셔서 감사합니다. btw – 1337Rooster
테스트를 위해 선택한 버전은 mylibrary의 pom 내에 선언되어 있습니다. 여러 버전을 다시 테스트 해 볼 수 있습니다. 그러나 나는 사용자가 foo 버전을 선택하기를 원하기 때문에 나는 당신의 질문을 이해하지 못한다고 생각한다. 이제는 foo 버전 (나는 혼란 스럽다)을 막을 것을 요구하고있다. –