2017-12-13 1 views
0

지금은 메이븐 프로젝트을 사용하고 있습니다. 그리고이 프로젝트는 logging.1.jar을 사용합니다. 이 프로젝트에 추가 할 새로운 기능이 있으며 logging.3.jar에 종속됩니다.메이븐 파일의 jar 파일 충돌

컴파일해도 문제가 없지만 jar 파일 충돌로 인해 런타임에 응용 프로그램이 실패합니다.

이유는 I 새롭게 logging.3.jar에 따라 그와 같은 기능을 추가 존재하는 클래스를 초기화 할 수 대신 logging.3.jar

logging.1.jar을 사용하고, 새롭게 추가 된 기능이다. 어떻게 해결 될 수 있습니까?

URLClassLoader을 사용하여 해결할 예정입니까?

+0

jar 파일을 삭제하고 maven dependency download를 다시 실행 하시겠습니까? – Shane

+0

어쩌면 당신이 당신의 pom을 제공하면 대답하기가 더 쉽습니다. 이미 Maven 제외를 확인 했습니까? – pirho

+0

@pirho 여기에는 동일한 jar 파일의 두 가지 다른 버전이 있습니다. 새로운 기능이 작동하려면 더 높은 버전의 (새로운) jar 파일에 의존하는 클래스를 초기화해야합니다. 그러나 런타임에 항상 더 낮은 버전의 jar (기존 jar)를 찾습니다. 2 개의 jar 파일로 작업해야합니다. 어떻게 해결할 수 있습니까? – RamhaKrishna

답변

0

pom.xml에 적절한 jar 종속성을 추가하고 mvn clean-install -U 명령을 실행하십시오. 이 명령은 불일치를 제거하고 올바르게 업데이트합니다.

0

부품 번호 종속성 제외Maven introduction.

그래서 당신은 당신의 치어이 같은 뭔가가 있어야는 :

<dependencies> 
    ... 
    <dependency> 
     <groupId>org.examle</groupId> 
     <artifactId>including-jar</artifactId> 
     <version>1.0.0</version> 
     <exclusions> 
     <exclusion> <!-- declare the exclusion here --> 
      <groupId>org.logging</groupId> 
      <artifactId>logging</artifactId> (or logging1) 
     </exclusion> 
     </exclusions> 
    </dependency> 
    ... 
    </dependencies> 

까다로운 부분은 이슈 (들) 이전에 따라 달라집니다 (포함 항아리 (들)) 발견해야한다는 것입니다 버전을 선택하고 이러한 제외 항목을 모든 해당 아티팩트에 추가하십시오. 그러나 후자의 솔루션은 모든 상황에 맞게 내가하지 않을 수 있습니다

<dependencies> 
    ... 
    <dependency> 
     <groupId>org.examle</groupId> 
     <artifactId>logging</artifactId> // or logging1 
     <version>1.0.0</version> 
     <scope>provided</scope> 
    </dependency> 
    ... 
    </dependencies> 

: 한편

는 실제로 가 제공 한 것처럼, 그 범위를 설정하여로드가이 오래된 유물을 방지 할 수있다 개인적으로는 실제 목적을 혼란스럽게하지 않기 때문에 우선적으로 선호합니다 (제외). 나중에는 놀라움을 유발하지 않습니다.

관련 문제