다른 버전하지만 서로 다른 버전의은 OSGi LinkageError가 동일한 패키지와 클래스,하지만이 라이브러리 플러그인, 같은 API를 같은 라이브러리의 각을 가지고
라이브러리 플러그인의하나는있다을 제공하는 두 개의 라이브러리 플러그인 MANIFEST.MF에 다음
Export-Package: com.package1.packagename1;version=1.0.0,
com.package2.packagename2;version=1.0.0
두 번째 라이브러리 플러그인하여 MANIFEST.MF에 정의 된 다음했습니다 사용
Export-Package: com.package1.packagename1;version=1.1.0,
com.package2.packagename2;version=1.1.0
플러그인 의이 API는하여 MANIFEST.MF에 정의 된 다음했습니다
가져 오기 - 패키지를 사용하는 플러그인이 활성화Import-Package: com.package1.packagename1;version="[1.0.0,1.1.0]",
com.package2.packagename2;version="[1.0.0,1.1.0]"
이 는 사용자가 원하는 라이브러리 의 버전을 확인하기 위해 기본 설정 값을 확인 사용. 활성제는 다음 가져 오기 - 패키지를 충족 할 수 단지 하나의 플러그인을 떠나, 원하지 않는 라이브러리 버전
bundle.stop()
bundle.uninstall()
를 사용합니다. 이 시점까지는 모든 기능이 예상대로 작동하고 올바른 버전의 라이브러리를 오류없이 사용할 수 있습니다.
버전을 변경할 때 문제가 발생합니다. 사용자가 라이브러리 환경 설정을 변경하면 현재 응용 프로그램이 종료되고 사용자에게 수동으로 다시 시작하라는 메시지가 표시됩니다. 이렇게하면 JVM과 플랫폼 이 다시 시작되므로 다른 버전의 플러그인을 프로그래밍 방식으로 중지하고 제거 할 수 있습니다.
java.lang.LinkageError: loader constraint violation: loader (instance of
org/eclipse/osgi/internal/baseadaptor/DefaultClassLoader) previously
initiated loading for a different type with name "com/package1/packagename1/ClassName"
이 비슷한 문제
here이 있었다, 그러나이 솔루션은 일부의 이름을 바꿀 것 같았다 그러나, 때 라이브러리 소비자 플러그인 라이브러리 플러그인의 나머지 설치된 버전을 호출하려고 시도 다음과 같은 예외가 발생합니다 패키지는 단지 문제를 피하기 위해. 전체적인 점은 완전히 동일한 API를 사용하고 기본 라이브러리 버전을 변경하기 때문에이 솔루션은 나를 위해 작동하지 않습니다.
환경 설정을 변경하지 않고 다시 시작하여 환경 설정을 변경하지 말고 라이브러리 버전을 변경하려면 사용자가 애플리케이션을 두 번 다시 시작하지 않아도되는 솔루션을 찾으십시오. 이 연결 오류를 피하기 위해이 문제를 해결할 다른 방법이 있습니까?
Eclipse에서 특정 번들을 프로그래밍 방식으로 새로 고치는 방법은 무엇입니까? 요약보기에는 bundle.refresh() 또는 Platform.refresh (bundleId) 메서드가 표시되지 않습니다. – seanr8
FrameworkWiring.refreshBundles를 찾으십시오. 번들 0에 bundle.adapt를 사용하여 FrameworkWiring으로 전송합니다. –