0

クラスへのアクセスが必要なプラグインを開発していますorg.eclipse.swt.widgets.Display。このクラスはに含まれていorg.eclipse.swt.win32.win32.x86_3.5.2.v3557f-RCP20100710-0200.jarます。ただし、クラスは次のようにマニフェストによってエクスポートさcom.ibm.rcp.jfaceex_6.2.2.20100729-1241れます。

Export-Package: com.ibm.rcp.jface.action,com.ibm.rcp.jface.launcher,co
 m.ibm.rcp.jface.themes,com.ibm.rcp.jface.util,com.ibm.rcp.jface.viewe
 rs,com.ibm.rcp.jface.window,com.ibm.rcp.jface.window.effects,com.ibm.
 rcp.ui.widgets.api.jface,com.ibm.rcp.ui.widgets.api.swt
Require-Bundle: com.ibm.rcp.swtex,org.eclipse.swt,org.eclipse.core.run
 time,org.eclipse.jface,org.eclipse.ui

現在、JREシステムライブラリの一部として含まれてcom.ibm.rcp.jfaceexません。ただし、これは、上記のエクスポートされたパッケージだけでなく、独自のクラスも含むバンドルです。

自分のプロジェクトで必要なのは、自分のプロジェクトのビルドパスにその参照を含めることだけだと信じ込まれましたが、これは機能していないようです。org.eclipse.swt.widgetsコンパイラーは、パッケージ内のクラスに対するインポートステートメントを解決できません。

これらのクラスが必要な場合、それらを正しくインポートするために、そして最小限の作業で正確に何をする必要がありますか?

Mavenまたはサードパーティのビルドツールは使用していません。これは経営陣によって義務付けられており、私はそれを変更することはできません。

アップデート

以下のE-Rizの提案に従ってorg.eclipse.swt、プラグインの[依存関係]タブの[必須バンドル]セクションに追加しました。次に、次のようにプロジェクトをエクスポートしようとします。

  1. プロジェクトを右クリックし、[エクスポート]を選択します。
  2. プラグイン開発->デプロイ可能なプラグインとフラグメントを選択します
  3. [すべて]を選択し、[完了]をクリックします

Eclipseがプロジェクトをビルドし、エラーが発生したことを通知します。ログを調べると、次のエラーが明らかになります。

1. ERROR in E:\NotesDev\Plug-in\com.ibm.lotuslabs.ui\src\com\ibm\lotuslabs\ui\UI.java (at line 1)
    /**
    ^
The type org.eclipse.swt.widgets.Shell cannot be resolved. It is indirectly referenced from required .class files

私のコード全体にこれらが数十あります。org.eclipse.swt名前空間バンドル内のクラスまたはメソッドへの参照ごとに1つ。これは、バンドルが正常にデバッグされるにもかかわらずです。

更新2

実際、に絶対パスを入れることができることを発見しBundle-ClasspathましたMANIFEST.MF。奇妙なことに、これによりコンパイル時のエラーがなくなりました。絶対パスがエンドユーザーの構成に対応することは確かに保証されていないため、現時点では、これが正しいことであるとは確信していません。

ただし、プラグインをNotes(ターゲットプラットフォーム)にインストールすると、意図したとおりに機能しません。

Notesは、プラグインが正常にインストールされたと報告していますが、プラグイン(ツールバーへの追加)は表示されません。この時点で、クラスパスのあるものはまだ正しくないと思います。

更新3

リクエストごとに、MANIFEST.MFおよびbuild.propertiesファイル。絶対パスは、[依存関係]タブと[ランタイム]タブを介してEclipseによって追加されたことに注意してください。

MANIFEST.MF

Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: Context Plug-in
Bundle-SymbolicName: com.ibm.lotuslabs.context.service;singleton:=true
Bundle-Version: 1.0.2
Bundle-Vendor: IBM
Bundle-RequiredExecutionEnvironment: JavaSE-1.6
Bundle-Activator: com.ibm.lotuslabs.context.service.internal.ContextPlugin
Bundle-ActivationPolicy: lazy
Bundle-ClassPath: context.jar,
 lib/activation-1.1.1.jar,
 lib/mail.jar,
 lib/SatuitCRM_XML_API2.jar,
 lib/commons-lang3-3.1/commons-lang3-3.1.jar,
 E:/NotesDev/Notes/framework/rcp/eclipse/plugins/org.eclipse.swt.win32.win32.x86_3.5.2.v3557f-RCP20100710-0200.jar
Require-Bundle: org.eclipse.core.runtime,
 org.eclipse.ui,
 org.eclipse.ui.views,
 org.eclipse.swt,
 com.ibm.rcp.swtex,
 com.ibm.rcp.jfaceex,
 com.satuit.core 
Export-Package: com.ibm.lotuslabs.context.service.document,
 com.ibm.lotuslabs.context.service.internal
Import-Package: org.eclipse.core.resources

build.properties

output.. = bin/
bin.includes = META-INF/,\
               context.jar,\
               lib/activation-1.1.1.jar,\
               lib/mail.jar,\
               lib/commons-lang3-3.1.jar,\
               lib/SatuitCRM_XML_API2.jar,\
               plugin.xml,\
               E:/NotesDev/Notes/framework/rcp/eclipse/plugins/org.eclipse.swt.win32.win32.x86_3.5.2.v3557f-RCP20100710-0200.jar
jars.compile.order = context.jar
source.context.jar = src/
4

3 に答える 3

3

バンドルがExport-Package宣言でパッケージに名前を付けているからといって、必ずしもそのパッケージのコードが含まれているとは限りません。バンドルは、依存しているバンドルからパッケージをエクスポートできます(ただし、ほとんどの場合、これは一般的に悪い考えだと思います)。

あなたにとって、解決策は簡単です:あなたMANIFEST.MFの[依存関係]タブに行き、必要なプラグインorg.eclipse.swtのリストに追加してください

于 2012-07-06T16:42:03.923 に答える
2

よくわかりませんが、2つのことが思い浮かびます。

  • プロジェクトのクラスパスからjarを削除し、com.ibm.rcp.jfaceex jarをターゲット・プラットフォームに追加します(「設定」->「PDE」->「ターゲット・プラットフォーム」で、com.ibm.rcp.jfaceex jarを含むディレクトリーをポイントします)。

  • または、参照を残して、jarをバンドルクラスパスに追加します(MANIFESTの[ランタイム]タブにあります)。

これがどのようにこのエラーを引き起こすかはよくわかりませんが、クラスパスの問題はPDEで奇妙な形で現れる可能性があります。

于 2012-07-12T06:08:00.433 に答える
0

Eclipse junoのswt関連バンドルを確認しました:org.eclipse.swt_3.100.0.v4233d.jar org.eclipse.swt.win32.win32.x86_3.100.0.v4233d.jar

ウィジェットは、最初のバンドルのフラグメントである2番目のバンドルに含まれています。

したがって、両方のバンドルがターゲットプラットフォームにあることを確認する必要があります。その場合、require bundleが機能するかどうかはわかりません(機能する可能性があります)。代わりに、必要なすべてのパッケージをインポートしてみてください。特に、パッケージorg.eclipse.swt.widgetsにImport-Packageが必要です。

于 2012-07-12T10:34:31.720 に答える