Eclipse plugin Eclipse插件,SWT";未解决的需求:需要能力“;

Eclipse plugin Eclipse插件,SWT";未解决的需求:需要能力“;,eclipse-plugin,Eclipse Plugin,我卡住了。我无法找出是什么原因导致我收到SWT包的“未解决的需求:需要能力”错误(如果我深入挖掘,还有其他错误)。它的要求是win32 os和ws,以及x86_64的arch,所有这些似乎都应该由我的系统来满足。我已经在下面列出了详细信息,并将根据任何人的要求更新详细信息 背景和问题详细信息 我正在做一个Eclipse插件项目,它已经很久没有被导出了。自上次发布以来,它从Java7升级到了8,从Juno升级到了Mars。上周,我使用.Product文件中的“Eclipse产品导出向导”发布了一个

我卡住了。我无法找出是什么原因导致我收到SWT包的“未解决的需求:需要能力”错误(如果我深入挖掘,还有其他错误)。它的要求是win32 os和ws,以及x86_64的arch,所有这些似乎都应该由我的系统来满足。我已经在下面列出了详细信息,并将根据任何人的要求更新详细信息

背景和问题详细信息

我正在做一个Eclipse插件项目,它已经很久没有被导出了。自上次发布以来,它从Java7升级到了8,从Juno升级到了Mars。上周,我使用.Product文件中的“Eclipse产品导出向导”发布了一个新版本。以前的版本还不错。从Eclipse中启动项目工作正常(使用产品文件上下文菜单runas->Eclipse应用程序创建启动配置)。使用.product和启动配置中显示的验证插件功能不会出现任何问题

日志显示以下内容:

!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”,这与org.eclipse.SWT.win32.win32.x86_64条目在.product文件的“plugins and Fragments”配置中指定的版本相同。(还有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控制台的权限,因为当时我没有为它提供必要的库

查看其他捆绑包,我也看到了一些未解决的状态

发展背景

我正在Windows7上开发、导出和运行该项目。我的开发者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以修复类似问题闻起来是错误的解决方案。

所以…在准备答案时,我找到了解决方案。我知道,如果我以前有人来反驳这一点,我当时可能会想到这一点

我注意到${target.ws}和${target.os}出现在启动配置中。我不知道这些是如何添加的;也许是产品文件生成了这些参数,也许是我在几个月前试图修复另一个bug时添加的。在任何情况下,我都在谷歌上搜索如何检查这些值,并决定简单地删除它们,在没有它们的情况下测试启动和导出。两者都很好。我不需要它们,我不确定它们是否包含值

重申一下,我的解决方案是删除.product文件中的“-os${target.os}-ws${target.ws}-arch${target.arch}”参数(以及从中派生的启动配置)

我可能是在这样的建议下添加它们的(但我不知道为什么):。看看Bull,我发现这些参数是在我第一次将项目从使用手动定义的启动配置更改为使用基于.product的启动配置时添加的;手动定义启动时存在不一致和依赖于机器的字符串。我不知道它们是自动添加的,还是我认为我需要它们