2 가지 버전의 Maven 아티팩트가 있습니다. A1, A2, B1, B2라고 할 수 있습니다. B1은 A1에 의존하고, B2는 A2에 의존한다. A1과 A2는 매우 유사합니다. A1이 Java 7을 사용하고 A2가 Java 8과 람다를 사용한다고 가정 해 봅시다. 모든 아티팩트는 고객이 사용하며 경우에 따라 환경에 잘못된 아티팩트를 설치합니다.Maven - 런타임에 이슈를 선택하십시오.
기본 A 이슈를 만들고 싶습니다. A1과 A2는 A를 상속하고 사용자 지정 기능과 A_Client를 추가하고 Ax (xxx) 모듈이 제공해야하는 몇 가지 속성 (JDK 및 일부 다른 항목)을 기반으로 runtime
에서 선택하려고합니다. 사용하십시오. 이렇게하면 고객이 A_Client를 설치해야하며 올바른 버전에 대해 걱정할 필요가 없습니다.
B1과 B2는 동일합니다. 유일한 차이점은 Ax 종속성입니다. A1과 A2를 어떻게 든 병합 할 수 있다면 A_Client에만 의존하는 클라이언트 용 B 아티팩트 만 사용할 수 있습니다. 이렇게하면 B 버전의 지옥도 없앨 것입니다.
그래서 질문 : runtime
에 종속성을 결정할 수 있습니까? 내 생각 엔 OSGi 또는 사용자 정의 클래스 로더를 사용하는 것이 가능할 수 있지만, 두 영역 모두에서 매우 제한된 지식을 가지므로 어떤 도움도 받으실 수 있습니다.
참고 : '제공된'범위는 런타임에 마술처럼 나타날 아티팩트를 위해 설계되었습니다. 그러나 나는 적절한 유물이 선택되었는지에 대한 경험이 없습니다. 나는 지식이있는 사람에게 대답을 남겨 둘 것이다. –
jar를 폴더에 넣고 다음과 같이 특정 속성을 기반으로 classpath에 추가합니다. http://stackoverflow.com/questions/1010919/adding-files-to-java-classpath-at-runtime – ieugen