スタンドアロンヘッドレスRCP に取り組んでいます。 Eclipse IDEでアプリケーションと製品を実行すると問題なく動作しますが、エクスポートして実行すると、このエラーがログファイルに記録されました。
!ENTRY org.Eclipse.equinox.ds 4 0 2013-01-16 13:27:59.132
!MESSAGE FrameworkEvent ERROR
!STACK 0
org.osgi.framework.BundleException: The bundle "org.Eclipse.equinox.ds_1.4.0.v20120522-1841 [3]" could not be resolved. Reason: Missing Constraint: Import-Package: org.Eclipse.equinox.internal.util.event; version="1.0.0"
at org.Eclipse.osgi.framework.internal.core.AbstractBundle.getResolverError(AbstractBundle.Java:1332)
at org.Eclipse.osgi.framework.internal.core.AbstractBundle.getResolutionFailureException(AbstractBundle.Java:1316)
...
!ENTRY org.Eclipse.equinox.ds 4 0 2013-01-16 13:28:00.901
!MESSAGE [SCR] Exception while activating instance org.Eclipse.e4.ui.css.swt.internal.theme.ThemeEngineManager@6b8d6157 of component org.Eclipse.e4.ui.css.swt.theme
!STACK 0
Java.lang.NoClassDefFoundError: org/Eclipse/swt/widgets/Display
at Java.lang.Class.getDeclaredMethods0(Native Method)
at Java.lang.Class.privateGetDeclaredMethods(Class.Java:2442)
この投稿 から参照すると、依存関係のない新しいバージョンのプラグインがあり、ランタイムパスに問題があることを理解しています。ただし、このエラーの原因は正確にはわかりません。
何が悪いのでしょうか?スタンドアロンとして実行した場合にのみこのエラーが発生するのはなぜですか?
Build.propertiesファイルがあります
output.. = bin/
bin.includes = META-INF/,\
plugin.xml,\
.
source.. = src/
これはMANIFEST.MFファイルです
Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: Refactorer
Bundle-SymbolicName: edu.utexas.seal.refactorer;singleton:=true
Bundle-Version: 1.0.0.qualifier
Bundle-Activator: edu.utexas.seal.refactorer.Activator
Bundle-Vendor: PROSSEEK
Bundle-RequiredExecutionEnvironment: J2SE-1.5
Bundle-ActivationPolicy: lazy
Require-Bundle: org.Eclipse.core.runtime;bundle-version="3.8.0",
org.Eclipse.jdt;bundle-version="3.8.0",
org.Eclipse.jdt.core;bundle-version="3.8.2",
org.Eclipse.core.resources;bundle-version="3.8.1",
org.Eclipse.text;bundle-version="3.5.200",
org.Eclipse.jdt.ui;bundle-version="3.8.1",
org.Eclipse.jdt.core.manipulation;bundle-version="1.5.0",
org.Eclipse.ltk.ui.refactoring;bundle-version="3.7.0",
org.Eclipse.jdt.core.manipulation;bundle-version="1.5.0",
org.Eclipse.ltk.core.refactoring;bundle-version="3.6.0",
org.Eclipse.jface.text;bundle-version="3.8.1",
org.Eclipse.core.expressions;bundle-version="3.4.401",
org.Eclipse.core.externaltools;bundle-version="1.0.100",
org.Eclipse.jface;bundle-version="3.8.101",
edu.utexas.seal.utilities;bundle-version="1.0.0",
org.Eclipse.core.filebuffers;bundle-version="3.5.200"
Bundle-ClassPath: .
Export-Package: edu.utexas.seal.refactorer
「。」というアイテムは1つしかありません。 Bundle-ClassPath。
最初にプロジェクトを再コンパイルしてから、ログファイルに苦情から必要なすべてのプラグインがあることを確認したところ、org.Eclipse.equinox.util
がないことがわかりました。これは自動的に含まれているはずです。インクルードした後、いくつかのエラーがなくなっただけで、さらに2つのエラーがあることがわかりました。
「実行環境」をJavaSE-1.5としてセットアップしましたが、Javaが@Overrideを認識できず、「スーパークラスメソッドをオーバーライドする必要があります」というエラーが発生するため、これは問題でした。
このサイトからヒントを得ました。
プロジェクトをEclipseにインポートした後の「スーパークラスメソッドのオーバーライドが必要」エラー
/Eclipse/configuration/config.ini
ファイルも変更する必要がありました。
osgi.bundles=org.Eclipse.equinox.common@2:start,org.Eclipse.update.configurator@3:
start,org.Eclipse.equinox.ds@3 <-- (From 2 to 3)
:start,org.Eclipse.core.runtime@start
Eclipseのバグかどうかはわかりませんが、 このサイト からヒントを得ました。
-consoleLog
は、ログファイルを常に開く必要がなかったので、本当に役に立ちました。不足しているバンドルを、追加の依存関係設定を介して、失敗したバンドルに直接追加することもできます。
<plugin>
<groupId>org.Eclipse.tycho</groupId>
<artifactId>target-platform-configuration</artifactId>
<version>${tycho.version}</version>
<configuration>
<dependency-resolution>
<extraRequirements>
<requirement>
<type>Eclipse-plugin</type>
<id>org.Eclipse.jface.text</id>
<versionRange>0.0.0</versionRange>
</requirement>
</extraRequirements>
</dependency-resolution>
</configuration>
</plugin>
同じものをfeature.xmlファイルに追加する必要があります。同じものを追加したら、プロジェクトをクリーンアップして、再ビルドしてみてください。これでこの問題は解決すると確信しています。