0

この質問は、これに対するフォローアップですPaul Websterは、私の問題の多くを理解するのを丁寧に助けてくれましたが、1つの厄介な問題が残っており、プラグインをデバッグしているときではなく、プラグインをエクスポートしているときのクラスパスの問題に帰着すると確信しています。 。

これは、Web上のさまざまなソース(このページは非常に貴重なリソースでした)から情報を取得することによって、これまでに私が理解した疑わしい情報です。

  • Bundle-Classpathプラグインは、MANIFEST.MFファイルのに完全に依存しています。クラスがJREシステムライブラリ、プラグイン依存関係、またはフォルダまたはJARのいずれにも見つからない場合、Bundle-ClasspathまたはNoClassDefFound例外NoClassFoundが発生します。
  • Require-Bundle私が作成しているバンドルにのみ使用してください。(つまり、私のワークスペースにバンドルがあります。つまり、私のRequire-Bundleリストはかなり短くなります。)
  • Import-Packageバンドルに必要なサードパーティパッケージに使用します。このリストは、使用しているサードパーティパッケージの数によっては、かなり大きくなる可能性があります。
  • サードパーティのパッケージが必要で、エクスポートされない場合は、そのバンドルを作成して、そのパッケージをエクスポートする必要があります。次に、それを必要とするパッケージで、エクスポートバンドルをインポートする必要があります。
  • バンドル自体にバンドル内のパッケージが含まれていて、それらをエクスポートする場合は、これらのパッケージをインポートされたパッケージとしてマニフェストに入れないでください。(つまり、バンドルによって既にエクスポートされているパッケージを再エクスポートしないでください。)

(コミュニティが修正したときに、上記の情報を更新します。)

そのため、これらすべてを念頭に置いて、MANIFEST.MFファイルを作り直し、上記のルールを遵守するようにしました。アプリケーションをデバッグすると、すべてが美しく機能します。すべてのクラスが見つかり、プラグインは期待どおりに実行されますが、プラグインをエクスポートしようとすると、状況が醜くなります。

プラグインをエクスポートしようとすると、1つを除いてすべてのプロジェクトがコンパイルされます。ログファイルには、次のメッセージが含まれています。

# 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.SCoolBarた。com.ibm.rcp.swtex.win32_6.2.2.20100729-1241.jarこれはたまたまによってエクスポートされcom.ibm.rcp.jfaceex_6.2.2.20100729-1241.jarます。私のプロジェクトでは、次のことを行いました。

  1. [依存関係]タブcom.ibm.rcp.jfaceexからに追加のバンドルとして追加されました。build.properties
  2. com.ibm.rc.swt.swidgets[依存関係]タブにインポートされたパッケージとして追加されました。

それでも、プラグインをエクスポートしようとすると、クラスが見つかりません。この時点で、プラグインのデバッグ時とエクスポート時のコンパイル方法には根本的な違いがあり、その違いが何であるかはわかりません。

誰かがこの最後の問題を解決するのを手伝ってくれるなら、私は本当に感謝しています。

MANIFEST.MFおよびファイルの関連部分は、build.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
4

1 に答える 1

1

明確な答えはありませんが、おそらくこれらの助けになります:

ターゲットプラットフォームを正しく設定する必要があると思います。ターゲットプラットフォームに、ワークスペースにない必要なすべてのバンドルが含まれていることを確認してください。依存関係を指定するときは、バンドルがワークスペースにあるかターゲットプラットフォームにあるかに関係なく、Require-Bundle(またはさらに適切にはImport-Package)を使用できます。

残りの部分:

  • バンドル(javax.swingなど)からシステムパッケージをエクスポートすることは、後で解像度を台無しにする可能性があるため、通常はお勧めできません。実際には、そのバンドルに含まれるバンドルからのみエクスポートする必要があります

  • 私は「additional.bundles」の構造にあまり慣れていません。これは標準のOSGiではなく、必要になるとは思いません。

于 2012-07-03T22:28:48.293 に答える