2012-07-03 2 views
0

이 질문은 this one의 후속 조치입니다. Paul Webster은 호의적으로 내 문제를 파악하는 데 도움이되었지만 문제가 하나 남았습니다. 클래스 패스 문제가 발생했을 때 익스포트 디버깅 중일 때 플러그인.Eclipse 플러그인 : 디버그 대 클래스 패스 내보내기

  • 플러그인이 Bundle-Classpath에 전적으로 의존 :

    이 웹에서 다양한 소스에서 정보를 긁어 내가 지금까지 알아 냈어요 반신 반의하는 정보입니다 (이 this page을위한 귀중한 자원이었다)은 MANIFEST.MF 파일에 있습니다. 클래스가 JRE 시스템 라이브러리, 플러그인 종속성 또는 Bundle-Classpath의 폴더 또는 JAR에서 발견되지 않으면 NoClassDefFound 또는 NoClassFound 예외가 발생합니다.

  • Require-Bundle 사용하고있는 번들에만 사용하십시오. (즉, 내 작업 공간의 번들입니다. 즉, 내 Require-Bundle 목록은 매우 짧을 것입니다.)
  • 내 번들에 필요한 타사 패키지에는 Import-Package을 사용하십시오. 이 목록은 내가 사용하는 타사 패키지의 수에 따라 상당히 클 수 있습니다.
  • 제 3 자 패키지가 필요하며 내보낼 수 없으면 해당 패키지에 대한 번들을 만들어 해당 패키지를 내 보내야합니다. 그런 다음 패키지가 필요한 패키지에서 내보내기 번들을 가져와야합니다.
  • 번들 자체가 번들 내에 패키지를 포함하고 내보내는 경우 이러한 패키지를 가져온 패키지로 Manifest에도 넣지 마십시오. (즉, 이미 번들 내 보낸 패키지 수출을 다시하지 않습니다.)

(나는 커뮤니티가 수정으로 위의 정보를 업데이트 할 수 있습니다.)

을 따라서, 모든 베어링 그 마음에, 나는 위의 규칙을 준수하도록 MANIFEST.MF 파일을 수정했습니다. 응용 프로그램을 디버깅 할 때 모든 것이 아름답게 작동합니다. 모든 클래스가 발견되고 플러그인이 예상대로 실행되지만 플러그 인을 내보낼 때 상황이 안 좋게됩니다.

플러그인을 내보낼 때 하나만 제외하고 모든 프로젝트가 컴파일됩니다.

# 7/3/12 10:09:57 AM EDT 
# Eclipse Compiler for Java(TM) 0.A76_R36x, 3.6.2, Copyright IBM Corp 2000, 2010. All rights reserved. 
---------- 
1. ERROR in E:\NotesDev\NotesPlugin\com.auth.lotusplugin.popdlg\src\com\auth\lotusplugin\popdlg\SettingsDialog2.java (at line 0) 
    package com.auth.lotusplugin.popdlg; 
    ^
The type com.ibm.rcp.swt.swidgets.SCoolBar cannot be resolved. It is indirectly referenced from required .class files 
---------- 
1 problem (1 error) 

지금, 나는 com.ibm.rcp.swt.swidgets.SCoolBarcom.ibm.rcp.jfaceex_6.2.2.20100729-1241.jar으로 수출 될 일이 com.ibm.rcp.swtex.win32_6.2.2.20100729-1241.jar, 내 보낸 것으로 확인되었습니다 : 로그 파일에 다음과 같은 메시지가 포함되어 있습니다. 내 프로젝트에서, 나는 다음과 같은 짓을했는지 :

  1. 종속성 탭을 통해 build.properties에 추가 번들로 추가 com.ibm.rcp.jfaceex.
  2. 종속성 탭에 com.ibm.rc.swt.swidgets을 가져온 패키지로 추가했습니다.

그럼에도 불구하고 플러그인을 내보낼 때 클래스를 찾을 수 없습니다. 이 시점에서 나는 플러그인이 디버깅 될 때 컴파일되는 방식과 반출되는 방식 사이에 근본적인 차이가 있다고 가정하고 그 차이점을 알지 못합니다.

누군가가이 마지막 문제를 해결할 수 있도록 도와 주시면 감사하겠습니다.

MANIFEST.MFbuild.properties 파일의 관련 부분은 참조 용으로 아래에 포함되어 있습니다.

MANIFEST.MF

Require-Bundle: com.ibm.lotuslabs.context.service, 
com.ibm.lotuslabs.ui, 
com.SatuitCRM.WebServices 
Import-Package: com.ibm.rcp.jface.action, 
com.ibm.rcp.swt.swidgets, 
javax.swing, 
lotus.domino, 
lotus.notes, 
org.eclipse.jface.action, 
org.eclipse.jface.window, 
org.eclipse.swt, 
org.eclipse.swt.events, 
org.eclipse.swt.graphics, 
org.eclipse.swt.layout, 
org.eclipse.swt.widgets, 
org.eclipse.ui.plugin, 
org.osgi.framework 
Export-Package: com.auth.lotusplugin.popdlg; 
    uses:="com.ibm.rcp.jface.action, 
    com.ibm.lotuslabs.context.service.document, 
    com.ibm.lotuslabs.ui, 
    com.ibm.rcp.jface.action, 
    com.ibm.rcp.swt.swidgets, 
    com.satuit.core, 
    com.SatuitCRM.WebServices, 
    javax.swing, 
    lotus.domino, 
    lotus.notes, 
    org.eclipse.jface.action, 
    org.eclipse.jface.window, 
    org.eclipse.swt, 
    org.eclipse.swt.events, 
    org.eclipse.swt.graphics, 
    org.eclipse.swt.layout, 
    org.eclipse.swt.widgets, 
    org.eclipse.ui.plugin, 
    org.osgi.framework" 
Bundle-ClassPath: ., 
com.satuit.core.jar, 
com.ibm.lotuslabs.ui.jar, 
com.ibm.lotuslabs.context.service.jar, 
com.SatuitCRM.WebService.jar, 
lib/activation-1.1.1.jar, 
lib/commons-lang3-3.1.jar, 
lib/mail.jar, 
lib/SatuitCRM_XML_API2.jar 

build.properties

source.. = src/ 
output.. = bin/ 
bin.includes = META-INF/,\ 
       plugin.xml,\ 
       lib/commons-lang3-3.1.jar,\ 
       lib/activation-1.1.1.jar,\ 
       lib/mail.jar,\ 
       lib/SatuitCRM_XML_API2.jar,\ 
       . 
additional.bundles = com.ibm.rcp.browser.ie,\ 
        com.ibm.rcp.jfaceex 

답변

1

명확한 컷 대답,하지만 어쩌면이 도움을하지 마십시오

내가 생각 타겟 플랫폼을 올바르게 설정하기 만하면됩니다. 대상 플랫폼에 작업 공간에없는 모든 번들이 포함되어 있는지 확인하십시오. 종속성을 지정할 때 번들이 작업 영역이나 대상 플랫폼에 있는지에 관계없이 Require-Bundle (또는 더 나은 여전히 ​​Import-Package)을 사용할 수 있습니다. 나머지 부분

: 번들에서 (javax.swing의 같은)

  • 내보내기 시스템 패키지는 해상도 나중에 엉망 수로, 일반적으로 나쁜 생각입니다. 해당 번들에있는 번들의 내용 만 내보내십시오.

  • 'additional.bundles'구성에 익숙하지 않아 표준 OSGi가 아니므로 필요하지 않을 것입니다.

+0

Eclipse에서 추가 번들이 추가되었습니다. Dependencies 탭에서 * Automated Management of Dependencies * 섹션을 사용하는 경우 명령을 추가합니다. –

관련 문제