문제

Eclipse에서 간단한 플러그인을 만들려고합니다. 응용 프로그램을 실행하면이 오류가 로그 파일에 표시됩니다.

org.osgi.framework.bundleexception : 번들에 대한 활성기 org.xyactivator org.xy가 유효하지 않습니다.

이 오류에 대해 알고 있습니까?

도움이 되었습니까?

해결책

당신을 확인하십시오 build.properties 부분

최종 바이너리 결과에있는 내용을 제대로 지정하지 않으면 작동하지 않습니다. .class 파일이 Manifest.mf가 말하는 위치를 확인하십시오.


~에서 Eclipsezone,이 오류 메시지의 또 다른 이유 :

로그에 메시지가 표시되면

 The activator org.example.FooActivator for bundle org.example.foo is invalid 

, 이것은 보통 그랬다는 것을 의미합니다 ClassNotFoundException 시작 () 메소드에 도달하기 전에 클래스를 처음으로로드하려고합니다.


펭귄 추가 :

Activator 클래스 생성자의 다른 클래스에서 새 개체를 만들 때 오류가 발생합니다. Activator 플러그인에서 객체를 만드는 것이 합법적이지 않습니까?

  • 아직 "활성화되지 않은"다른 플러그인에서 해당 클래스 인 경우 문제가 될 수 있습니다.
  • 해당 클래스를 찾을 수없는 경우 플러그인 활성화기를 무효화합니다.

기본 조언 :이 초기화가 start() 방법Activator 생성자보다는.

다른 팁

다른 작업 공간에서 플러그인을 가져 오는 동안 같은 문제에 직면했습니다. 기본적으로 클래스를로드하는 동안 프레임 워크가 찾는 번들 클래스 경로입니다. 다른 작업 공간으로 가져 오면 클래스 경로를 변경하여 클래스 파일이있는 위치를 가리 키십시오.

ClassPath를 수정 한 후 청소 및 재건 및 재건을 시도하십시오. 작동해야합니다.

Eclipse Workspace를 새로운 경로로 옮기면 플러그인 빌드 전에 프로젝트-> 청소를 사용 하거나이 문제를 충족시켜야합니다.

좋아, 나는 여기에서 명백한 대위가 싫다. 그러나 나는 전에이 실수를했다. BundleActivator를 확장하는 것을 잊어 버릴 때도 발생할 수 있습니다.

나는이 문제로 시간을 보냈다. 마지막으로 ClassNotFoundExceptions가 내 코드와 일치하지 않고 잘못된 (오래된) 패키지에서 나왔음을 알았습니다. 디버그/내보내기를 엉망으로 만들고있는 다른 플러그인이 있는지 확인했으며 실제로 내 자신의 플러그인이 있었는지 확인했습니다!

따라서 이것에 직면하고 CNFE가 코드와 일치하지 않는 경우 시도해 볼 간단한 수정 사항입니다.

  • "새 소프트웨어 설치"로 이동
  • "이미 설치"를 클릭하십시오.
  • 패키지/플러그인의 모든 인스턴스를 제거하고 다시 시작합니다.

플러그인 ID를 변경하여 Eclipse가 새 플러그인으로 취급했기 때문에 발생했을 것입니다.

좌절하고 붙어 있다면 살펴 보는 또 다른 좋은 사이트 : http://www.eclipsezone.com/eclipse/forums/t99010.html

내 경우에는 "Activator .. invalid"이 메시지가 있었다. 그러나 다음 예외에서는 번들에 classnotfound 예외가 있었다. 나는 무언가를 바꾸지 않았다 ..

Guu (솔루션도 게시)는 내 영웅입니다. 증가

Bundle-ManifestVersion: 2

에게

Bundle-ManifestVersion: 3

모든 것이 작동합니다 :)

나는 같은 예외를 얻었다. 근본적인 문제는 ClassCastException이었습니다. 내 번들에는 org.osgi.core 4.3이 필요하지만 Equinox 런처는 4.2를 사용합니다.

롤랜드에 안부

다른 번들에 패키지 후 번들 이름을 지정하는 경우에도 발생할 수 있습니다.

그래서:

  • 당신이 가지고 있다면 Bundle A 패키지가 포함되어 있습니다 org.my.package.name.function,
  • 그리고 당신은 창조합니다 bundle B 이름으로 org.my.package.name.function,
    • => 그러면 시스템은 활성기를 찾아서 찾을 수 없습니다.

오류의 이유를 찾았습니다. Activator 클래스 생성자의 다른 클래스에서 새 개체를 만들 때 오류가 발생합니다. 플러그인 활성화기에서 객체를 만드는 것이 합법적이지 않습니까?

필자의 경우이 예외는 Eclipse Custom Class 로더가 다른 플러그인의 클래스에 따라 모든 것을 해결하고로드 할 수 없기 때문입니다. 나는 Eclipse Super-Guru가 아니기 때문에 아마도 내 잘못 일 것입니다.

그러나 플러그인의 게으른 로딩을 비활성화하여 고정되었습니다. GUI에서 개요MANIFEST.MF 편집자는 확인 해제합니다 클래스 중 하나가로드 될 때이 플러그인 활성화. 또는 직접 MANIFEST.MF 라인 삭제

Bundle-ActivationPolicy: lazy

또 다른 선장 명백 : 소스 파일의 경로를 변경하면 (예 : SRC/SRC/MAIN/JAVA), Build.Properties를 업데이트하는 것을 잊어 버리면 컴파일이 항상 성공하지만 플러그인은 결코 작동하지 않습니다.

같은 오류가 있었는데, 제 경우에는 매개 변수로 나만의 생성자를 만들었습니다. 그러나 기본 생성자를 제공하지 않았습니다. 따라서 생성자를 제거하고 start () 메소드 내에서 모든 것을 초기화 한 후에는 Charme처럼 작동했습니다.

나는 또한 같은 오류를 충족시켰다. 번들 XX 용 활성화 자 XX는 유효하지 않으며 ClassNotFoundException입니다. 플러그인 directory를 확인했는데 필요한 수업을 찾을 수 없었습니다.

- 필요한 클래스가 포함 된 JAR 파일이 없기 때문에 해당 디렉토리 만 있습니다. 예를 들어, com.hh.jar는 없지만 com.hh 디렉토리 만 있습니다.

따라서 com.hh.jar를 만드는 것에 대해 잘못된 것이 있어야합니다.

com.hh.jar를 참조하면 다른 플러그인을 참조하십시오.

Manifest.mf를 편집하여 문제를 해결했습니다. 런타임 탭에서 플러그인 Manifest 편집기로 열면 "내보내기 패키지"에 필요한 패키지를 추가하십시오. 그리고 "클래스 경로"에서 필요한 라이브러리를 추가하고 "." (현재 디렉토리, 중요)

나는 또한 'Bundle-iing'Plain Jar 파일을 할 때 이것에 대해 도입했습니다. 일부 의존성이 해결되지 않거나 항아리가 사용하는 것보다 더 높은 Java 버전에 의존하는 경우 활성기는 시작하지 않으므로 위의 예외가 제공됩니다. 이것이 문제인지 알아내는 빠른 방법은 번들 클래스 경로 (매니페스트의 런타임 탭)에서 항아리를 제거하고 활성기가 올바르게 실행되는지 확인하는 것입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top