2016-08-05 7 views
1

私は立ち往生しています。私は、SWTバンドル(と深く掘り下げれば、他のもの)の "未解決の要件:要求可能性"エラーを受け取る原因を突き止めることができません。そのために述べられている要件は、win32 osとws、そしてx86_64のアーチです。これらはすべて私のシステムで満足しているようです。私は以下の詳細を含め、誰でも要求する詳細を更新する予定です。Eclipseプラグイン、SWT「未解決の要件:必要な機能」

背景と問題の詳細

私は長い時間でエクスポートされていないEclipseプラグインプロジェクトに取り組んでいます。 Java 7から8へ、JunoからMarsへ、最後のリリースからアップグレードされました。先週、.productファイルで 'Eclipse Product export wizard'を使用して新しいリリースを行った。以前のリリースは問題ありませんでした。 Eclipse内からプロジェクトを起動すると、製品ファイルのコンテキストメニューの[実行As-> Eclipseアプリケーションを使用してLaunch設定を作成しています。 .productとlaunchの両方の設定で見られるValidateプラグイン機能を使用すると、問題はありません。

ログショー以下:

!SESSION 2016-08-05 09:50:28.847 ----------------------------------------------- 
eclipse.buildId=unknown 
java.version=1.8.0_101 
java.vendor=Oracle Corporation 
BootLoader constants: OS=${target.os}, ARCH=${target.arch}, WS=${target.ws}, NL=en_US 
Framework arguments: -enableassertions 
Command-line arguments: -os ${target.os} -ws ${target.ws} -arch ${target.arch} -clean -consoleLog -enableassertions -console 

!ENTRY org.eclipse.osgi 4 0 2016-08-05 09:50:30.975 
!MESSAGE An error occurred while automatically activating bundle org.eclipse.ui.workbench (96). 
!STACK 0 
org.osgi.framework.BundleException: Error starting module. 
at org.eclipse.osgi.container.Module.doStart(Module.java:580) 
... 
Caused by: java.lang.NoClassDefFoundError: org/eclipse/swt/SWTError 
    at java.lang.Class.getDeclaredConstructors0(Native Method) 
    at java.lang.Class.privateGetDeclaredConstructors(Unknown Source) 
    at java.lang.Class.getConstructor0(Unknown Source) 
    at java.lang.Class.newInstance(Unknown Source) 
    at org.eclipse.osgi.internal.framework.BundleContextImpl.loadBundleActivator(BundleContextImpl.java:755) 
    at org.eclipse.osgi.internal.framework.BundleContextImpl.start(BundleContextImpl.java:706) 
    at org.eclipse.osgi.internal.framework.EquinoxBundle.startWorker0(EquinoxBundle.java:941) 
    at org.eclipse.osgi.internal.framework.EquinoxBundle$EquinoxModule.startWorker(EquinoxBundle.java:318) 
    at org.eclipse.osgi.container.Module.doStart(Module.java:571) 
    ... 42 more 
Caused by: java.lang.ClassNotFoundException: org.eclipse.swt.SWTError cannot be found by org.eclipse.ui.workbench_3.107.0.v20150825-2206 
    at org.eclipse.osgi.internal.loader.BundleLoader.findClassInternal(BundleLoader.java:439) 
    at org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:352) 
    at org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:344) 
    at org.eclipse.osgi.internal.loader.ModuleClassLoader.loadClass(ModuleClassLoader.java:160) 
    at java.lang.ClassLoader.loadClass(Unknown Source) 
    ... 51 more 
Root exception: 
java.lang.NoClassDefFoundError: org/eclipse/swt/SWTError 
... 

!ENTRY org.eclipse.osgi 4 0 2016-08-05 09:50:30.988 
!MESSAGE An error occurred while automatically activating bundle ca.uvic.chisel.atlantis (2). 
!STACK 0 
org.osgi.framework.BundleException: Error loading bundle activator. 
    at org.eclipse.osgi.internal.framework.BundleContextImpl.start(BundleContextImpl.java:711) 
etc etc... 

私はOSGiコンソールへのアクセス権を持っている、といくつかのより多くの情報が得:

osgi> ss org.eclipse.swt 
"Framework is launched." 


id  State  Bundle 
82  RESOLVED org.eclipse.swt_3.104.1.v20150825-0743 
113  INSTALLED org.eclipse.swt.win32.win32.x86_64_3.104.1.v20150825-0743 
osgi> diag 113 
org.eclipse.swt.win32.win32.x86_64 [113] 
    Unresolved requirement: Require-Capability: eclipse.platform; filter:="(& (osg 
i.ws=win32) (osgi.os=win32) (osgi.arch=x86_64))" 

`` `

一部を私のシステムのSWTの詳細...エクスポートされたアプリケーションには "/plugins/org.eclipse.swt.win32.win32"があります。 「x86_64_3.104.1.v20150825-0743.jar」です。これは、.productファイルの「Plug-ins and Fragments」設定のorg.eclipse.swt.win32.win32.x86_64エントリで指定されているものと同じバージョンです。 (org.eclipse.swt_3.104.1.v20150825-0743.jarと一致するorg.eclipse.swtもあります)。バンドルフラグメントの要件は、osgiコンソールの結果、つまり "(&(osgi.ws = win32)(osgi.os = win32)(osgi.arch = x86_64)))に記載されています。

私のアーカイブからの以前の(機能している)リリースでは、org.eclipse.swt.win32.win32.x86_64_3.100.1.v4234e.jarを持っています。バンドルフラグメントの要件が同じか異なるかどうかはわかりません。このリリースではosgiコンソールにアクセスすることはできません。なぜなら、私はそれに必要なライブラリを含めなかったからです。

他のバンドルを見ると、解決済みのステータスでもないものも見受けられました。

開発コンテキスト

私は、開発のエクスポート、およびdevに関するWindows 7のマイJREシステム・ライブラリ上でプロジェクトを実行していますがjre1.8.0_101-B13です。これは、Javaアプリケーションを実行するためにインストールされたJREと同じバージョン(同じファイルパス)です。

C:\Atlantis Export\Atlantis 0.3.0 TEST 3>java -XshowSettings:properties -version 
Property settings: 
    awt.toolkit = sun.awt.windows.WToolkit 
    file.encoding = Cp1252 
    file.encoding.pkg = sun.io 
    file.separator = \ 
    java.awt.graphicsenv = sun.awt.Win32GraphicsEnvironment 
    java.awt.printerjob = sun.awt.windows.WPrinterJob 
    java.class.path = . 
    java.class.version = 52.0 
    java.endorsed.dirs = C:\Program Files\Java\jre1.8.0_101\lib\endorsed 
    java.ext.dirs = C:\Program Files\Java\jre1.8.0_101\lib\ext 
     C:\Windows\Sun\Java\lib\ext 
    java.home = C:\Program Files\Java\jre1.8.0_101 
    java.io.tmpdir = C:\Users\eric\AppData\Local\Temp\ 
    java.library.path = C:\ProgramData\Oracle\Java\javapath 
     C:\Windows\Sun\Java\bin 
     C:\Windows\system32 
     C:\Windows 
     C:\ProgramData\Oracle\Java\javapath 
     C:\Windows\system32 
     C:\Windows 
     C:\Windows\System32\Wbem 
     C:\Windows\System32\WindowsPowerShell\v1.0\ 
     C:\Program Files (x86)\pgmodeler 
     C:\WinPython-64bit-3.4.3.5\python-3.4.3.amd64 
     %USERPROFILE%\.dnx\bin 
     C:\Program Files\Microsoft DNX\Dnvm\ 
     C:\Program Files\nodejs\ 
     C:\Program Files (x86)\Skype\Phone\ 
     C:\Windows\System32\WindowsPowerShell\v1.0\ 
     C:\Program Files\010 Editor 
     C:\Users\eric\AppData\Roaming\npm 
     . 
    java.runtime.name = Java(TM) SE Runtime Environment 
    java.runtime.version = 1.8.0_101-b13 
    java.specification.name = Java Platform API Specification 
    java.specification.vendor = Oracle Corporation 
    java.specification.version = 1.8 
    java.vendor = Oracle Corporation 
    java.vendor.url = http://java.oracle.com/ 
    java.vendor.url.bug = http://bugreport.sun.com/bugreport/ 
    java.version = 1.8.0_101 
    java.vm.info = mixed mode 
    java.vm.name = Java HotSpot(TM) 64-Bit Server VM 
    java.vm.specification.name = Java Virtual Machine Specification 
    java.vm.specification.vendor = Oracle Corporation 
    java.vm.specification.version = 1.8 
    java.vm.vendor = Oracle Corporation 
    java.vm.version = 25.101-b13 
    line.separator = \r \n 
    os.arch = amd64 
    os.name = Windows 7 
    os.version = 6.1 
    path.separator = ; 
    sun.arch.data.model = 64 
    sun.boot.class.path = C:\Program Files\Java\jre1.8.0_101\lib\resources.jar 
     C:\Program Files\Java\jre1.8.0_101\lib\rt.jar 
     C:\Program Files\Java\jre1.8.0_101\lib\sunrsasign.jar 
     C:\Program Files\Java\jre1.8.0_101\lib\jsse.jar 
     C:\Program Files\Java\jre1.8.0_101\lib\jce.jar 
     C:\Program Files\Java\jre1.8.0_101\lib\charsets.jar 
     C:\Program Files\Java\jre1.8.0_101\lib\jfr.jar 
     C:\Program Files\Java\jre1.8.0_101\classes 
    sun.boot.library.path = C:\Program Files\Java\jre1.8.0_101\bin 
    sun.cpu.endian = little 
    sun.cpu.isalist = amd64 
    sun.desktop = windows 
    sun.io.unicode.encoding = UnicodeLittle 
    sun.java.launcher = SUN_STANDARD 
    sun.jnu.encoding = Cp1252 
    sun.management.compiler = HotSpot 64-Bit Tiered Compilers 
    sun.os.patch.level = Service Pack 1 
    sun.stderr.encoding = cp437 
    sun.stdout.encoding = cp437 
    user.country = US 
    user.dir = C:\Atlantis Export\Atlantis 0.3.0 TEST 3 
    user.home = C:\Users\eric 
    user.language = en 
    user.name = eric 
    user.script = 
    user.timezone = 
    user.variant = 

java version "1.8.0_101" 
Java(TM) SE Runtime Environment (build 1.8.0_101-b13) 
Java HotSpot(TM) 64-Bit Server VM (build 25.101-b13, mixed mode) 

私は再び火星からネオンにアップグレードしようとしました。それは何も解決しませんでした。このような問題を解決するためにJunoにダウングレードすると、間違った解決策のような臭いがでます。

答えて

1

私の答えを準備しているうちに、解決策が見つかりました。私はこれを前に跳ね返す人がいたら、それは私に起こったのかも知れない。

私は、$ {target.ws}と$ {target.os}が起動設定に含まれていることに気付きました。私はこれらがどのように追加されたか分かりません。おそらく製品ファイルがこれらの引数を生成したのでしょうか、おそらく月前に別のバグを修正しようとしたときに追加したのかもしれません。いずれにせよ、私はこれらの値を調べる方法を見つけようとしていましたが、単純にそれらを削除し、それらを使わずに起動とエクスポートをテストすることにしました。どちらもうまくいきました。私は彼らがそこにいる必要はありません、私は彼らが値を含んでいたかどうかわかりません。

私の解決策は、.productファイル内の "-os $ {target.os} -ws $ {target.ws} -arch $ {target.arch}"引数を削除することでした。それから派生した設定を起動します)。

このようなアドバイスで追加したかもしれませんが(理由はわかりません):Eclipse Validation error - Platform filter did not match:(&(osgi.ws=win32)(osgi.os=win32)(osgi.arch=x86))。非難を見ると、プロジェクトを最初に手動で定義した起動構成から、プロダクトベースの起動構成を使用するように変更したときに引数が追加されたことがわかります。起動が手動で定義されたときに、矛盾とマシンに依存する文字列がありました。私は彼らが自動的に追加されたか、私がそれらを必要と思ったかどうかは分かりません。

関連する問題