2012-07-18 3 views
0

내 응용 프로그램에는 기능이 있지만 버전 번호가 다른 두 개의 jar 파일이 있습니다.일부 기능은 있지만 버전 번호가 다른 두 개의 jar 파일

-rwxr-xr-x 1 nobody nobody 87776 Jul 16 23:40 commons-io-1.3.2.jar 
-rwxr-xr-x 1 nobody nobody 109043 Jul 16 23:35 commons-io-1.4.jar 

하나의 jar 1.4.jar에는 deleteQuietly() 메소드가 있지만 낮은 버전 1.3.1 jar에는 no가 있습니다.

내 퍼즐은 내가 메서드를 호출 할 때 오류를보고하는 것입니까?

기호 기호를 찾을 수 없습니다 : 방법 deleteQuietly (java.io.File의)를

을 나는이 사건이있을 때이 오류가 발생할 :

답변

0

당신이 요구하는 것을 완전히 명확하지 않다, 그러나 최고 조언은 단순히 그렇게하지 않는 것입니다. 컴파일/빌드시에는 JAR의 버전을 하나만 사용하고 런타임에는 동일한 버전을 사용하십시오.

양방향으로 100 % 호환되지 않는 API가있는 JAR 버전이 두 개있는 경우 동작은 클래스 경로에서 첫 번째 JAR 파일에 따라 달라집니다. 메소드가없는 버전이 먼저 나오는 경우 빌드 오류 (예 : 오류 메시지의 오류) 또는 런타임 오류가 발생합니다.


나는 아마도 당신이 생각하기에는 다소 혼란 스럽습니다. 아마도 자바는 클래스의 두 버전을 모두로드하고 다른 버전의 메소드를 선택하기 위해 일종의 마법을 사용한다고 생각할 것입니다. 그것은 그렇게 작동하지 않습니다. Java는 발생하는 클래스의 첫 번째 버전을로드합니다. 다른 클래스는 자동으로 무시됩니다.

0

이것은 클래스 로더 문제입니다. classpath에서 commons-io-1.3.2.jar를 제거하고 다시 배포하십시오.이 jar를 제거하지 않으려면 maven을 사용하여 클래스로드 문제를 방지하십시오.

+0

Maven은 클래스로드 문제를 어떻게 해결합니까? – BeeOnRope

+0

Maven은 의존성 태그를 선언하는 하나의 jar를 사용합니다. jiafu의 질문처럼 Jar 중복을 해결합니다. –

관련 문제