2013-10-16 2 views
0

동일한 클래스를 포함하는 여러 개의 jar가 있습니다.동일한 클래스가 여러 개의 jar에 있습니다.

예를 들어 A.jar와 B.jar의 클래스가 Hello.class 인 경우를 가정 해 보겠습니다. ; b.JAR가

내 질문 com.testing.testcode가 실행하거나하지 않습니다 여부에 a.jar가 -classpath

자바 : 나는 다음 실행하면 어떻게됩니까? 나의 이해에서 클래스 로더는 클래스 패스를 스캔 할 것이고, Hello.class가 먼저 발견되면 리턴 할 것이다.

OSGi를 사용하여 특정 클래스를로드하는 경우이 문제를 피할 수 있습니다.

하지만 내 질문은 - 이것이 실행 여부와 상관없이 무엇입니까? 또는 java -classpath A.jar; B.jar com.testing.testcode는 동일한 클래스의 두 버전을 가지고 있기 때문에 세분화됩니다.

+0

실행했을 때 어떤 현상이 발생 했습니까? 결과가 혼란 스럽습니까? –

+0

충돌하는 클래스를 사용하지 않는 한 컴파일러는 자동으로 작동하므로 사용하자마자 package.classname 형식과 함께 사용해야합니다. 다른 코드는 컴파일되지 않습니다. –

+0

글쎄, 해봤을 때 무슨 일이 있었 니? – scottb

답변

3

이 작동하며 클래스 경로의 첫 번째 안녕하세요 클래스는이 경우에, 그래서 사용되는은에 a.jar

+1

* 보통 * 작동하며 classpath에있는 클래스의 첫 번째 버전이 사용됩니다. 그러나, 문제 클래스를 참조하는 클래스가 참조 클래스의 jar에있는 버전에 대해 "기본 설정을 표현"할 수있는 상황이 있습니다. 이로 인해 "동일한"클래스가 두 번로드 될 수 있습니다. 이는 항상 문제가 아니지만 발생할 수 있습니다. –

+0

설명을위한 Thyx –

+1

참조하는 클래스의 항아리에있는 버전에 대한 상황을 어떻게 표현할 수 있습니까? – Exploring

0

클래스 경로에서 하나는 "경로"입니다. 첫 번째 경기가 진행됩니다.

먼저 검사되는 부트 클래스 경로가 있으며 여기에는 JRE의 JAR이 포함됩니다. BTW 시스템 클래스를 앞에 추가하고 시스템 클래스를 무시할 수는 있지만 라이센스 계약에서 허용되지 않을 수도 있습니다.

0

클래스 패스에 jar 파일을 포함시킬 때마다 startup/on 응용 프로그램 클래스가 컨테이너에로드됩니다.

이제 코드가 작동이나되는 병이 컨테이너에 처음로드됩니다 당신이 당신의 현재 설치 한 후 운이 따라하면 당신이 method1 doesn't accept Type1 it should accept Type2 것을 말하는 몇 가지 오류를 얻을 수 있습니다 다른 작동 따라 달라집니다 여부.

+0

또는 클래스를 가져올 수 있습니다 TheClass가 두 번로드되면 TheClass를 TheClass로 캐스팅 예외를 캐스팅합니다. –

관련 문제