启动插件失败,缺少约束 javax.xml.bind。

19

我正在使用Eclipse RCP (Kepler)编写Eclipse插件。一切都很顺利,直到昨晚测试插件时突然出现了空指针异常。以下是堆栈跟踪的片段:

!ENTRY org.eclipse.ui.workbench 4 2 2013-08-24 08:36:17.616
!MESSAGE Problems occurred when invoking code from plug-in: "org.eclipse.ui.workbench".
!STACK 0
java.lang.NullPointerException
at org.eclipse.equinox.internal.p2.ui.sdk.scheduler.migration.MigrationSupport.getLastMigration(MigrationSupport.java:229)
at org.eclipse.equinox.internal.p2.ui.sdk.scheduler.migration.MigrationSupport.baseChangedSinceLastPresentationOfWizard(MigrationSupport.java:190)
at org.eclipse.equinox.internal.p2.ui.sdk.scheduler.migration.MigrationSupport.performMigration(MigrationSupport.java:69)
at org.eclipse.equinox.internal.p2.ui.sdk.scheduler.AutomaticUpdateScheduler.earlyStartup(AutomaticUpdateScheduler.java:89)
at org.eclipse.ui.internal.EarlyStartupRunnable.runEarlyStartup(EarlyStartupRunnable.java:87)
at org.eclipse.ui.internal.EarlyStartupRunnable.run(EarlyStartupRunnable.java:66)
at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42)
at org.eclipse.ui.internal.Workbench$55.run(Workbench.java:2552)
at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53)
java.lang.NullPointerException
at org.eclipse.core.internal.runtime.InternalPlatform.getLog(InternalPlatform.java:354)
at org.eclipse.core.runtime.Plugin.getLog(Plugin.java:291)
at org.eclipse.ui.internal.WorkbenchPlugin.log(WorkbenchPlugin.java:830)
at org.eclipse.ui.statushandlers.StatusManager.logError(StatusManager.java:285)
at org.eclipse.ui.statushandlers.StatusManager.handle(StatusManager.java:200)
at org.eclipse.ui.statushandlers.StatusManager.handle(StatusManager.java:231)
at org.eclipse.ui.statushandlers.StatusManager$StatusManagerLogListener.logging(StatusManager.java:305)
at org.eclipse.core.internal.runtime.RuntimeLog.logToListeners(RuntimeLog.java:160)
at org.eclipse.core.internal.runtime.PlatformLogWriter.logged(PlatformLogWriter.java:100)
at org.eclipse.equinox.log.internal.ExtendedLogReaderServiceFactory.safeLogged(ExtendedLogReaderServiceFactory.java:86)
at org.eclipse.equinox.log.internal.ExtendedLogReaderServiceFactory.logPrivileged(ExtendedLogReaderServiceFactory.java:205)
at org.eclipse.equinox.log.internal.ExtendedLogReaderServiceFactory.log(ExtendedLogReaderServiceFactory.java:178)
at org.eclipse.equinox.log.internal.ExtendedLogServiceFactory.log(ExtendedLogServiceFactory.java:65)
at org.eclipse.equinox.log.internal.ExtendedLogServiceImpl.log(ExtendedLogServiceImpl.java:87)
at org.eclipse.equinox.log.internal.LoggerImpl.log(LoggerImpl.java:54)
at org.eclipse.core.internal.runtime.PlatformLogWriter.logging(PlatformLogWriter.java:43)
at org.eclipse.core.internal.runtime.RuntimeLog.log(RuntimeLog.java:96)
at org.eclipse.core.runtime.SafeRunner.handleException(SafeRunner.java:71)
at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:44)
at org.eclipse.ui.internal.Workbench$55.run(Workbench.java:2552)
at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53)
为了尝试弄清楚可能发生了什么,我进入了我的插件的启动配置并点击“验证插件”,然后出现以下错误:
org.apache.xmlrpc
    Missing Constraint: Import-package: javax.xml.bind; version="0.0.0"

缺失约束

这可能是导致我的插件启动失败的原因吗?如果是的话,我该如何修复它?

谢谢。

6个回答

9
您可以右键单击项目,选择“运行为” -> “运行配置”,然后进入“插件”选项卡。在这里单击“添加所需的插件”按钮,这应该会自动解决您的验证问题。

11
我在Neon.2中进行插件开发时遇到了相同的错误信息,而“添加所需插件”按钮并没有解决问题。 - aro_tech
@aro_tech 我在Neon上遇到了同样的问题。也许这与某个插件的最近更新有关。 - Justin
我遇到了许多错误信息,其中一些是通过使用此按钮修复的。 - Sadık
这个修复方法对我有用,我正在为TFS添加插件。谢谢@Monica。 - Rahul Kote

8

为了消除xmlrpc警告,我不得不在我的运行配置“Eclipse应用程序”中删除以下插件:

org.apache.xmlrpc
org.eclipse.mylyn.bugzilla.core
org.eclipse.mylyn.bugzilla.ui
org.eclipse.mylyn.commons.xmlrpc

在Eclipse RCP, Oxygen的最新版本中,使用“Hello World,Command”模板创建新插件时,xmlrpc警告已经出现。此问题在Windows7上发生。

自从Oxygen版本以来,xmlrpc问题不再在控制台中出现,而是作为一个额外的弹出窗口出现,我觉得这更加令人烦恼和困惑。控制台会显示以下附加输出:

 SLF4J: Class path contains multiple SLF4J bindings.
    SLF4J: Found binding in [bundleresource://555.fwk1347294617:1/org/slf4j/impl/StaticLoggerBinder.class]
    SLF4J: Found binding in [bundleresource://555.fwk1347294617:2/org/slf4j/impl/StaticLoggerBinder.class]
    SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.
    SLF4J: Actual binding is of type [ch.qos.logback.classic.util.ContextSelectorStaticBinder]
    08:49:41.650 [Worker-1] INFO  c.g.t.t.d.PublishedGradleVersions - Gradle version information cache is up-to-date. Trying to read.
    !SESSION 2017-09-04 08:49:32.846 -----------------------------------------------
    eclipse.buildId=4.7.0.I20170612-0950
    java.version=1.8.0_144
    java.vendor=Oracle Corporation
    BootLoader constants: OS=win32, ARCH=x86_64, WS=win32, NL=de_DE
    Framework arguments:  -product org.eclipse.platform.ide
    Command-line arguments:  -product org.eclipse.platform.ide -data D:\eclipse\workspace/../runtime-EclipseApplication -dev file:D:/eclipse/workspace/.metadata/.plugins/org.eclipse.pde.core/Eclipse Application/dev.properties -os win32 -ws win32 -arch x86_64 -consoleLog

    !ENTRY org.eclipse.egit.ui 2 0 2017-09-04 08:49:41.847
    !MESSAGE Warning: The environment variable HOME is not set. The following directory will be used to store the Git
    user global configuration and to define the default location to store repositories: 'C:\Users\eis'. If this is
    not correct please set the HOME environment variable and restart Eclipse. Otherwise Git for Windows and
    EGit might behave differently since they see different configuration options.
    This warning can be switched off on the Team > Git > Confirmations and Warnings preference page. 

这可能是导致我的插件启动失败的原因吗?

我想不是。我的插件似乎没有受到那些警告的影响。

  • git 警告可以在Eclipse团队首选项中禁用,正如警告本身建议的那样。

  • slf4j 警告可以通过删除插件ch.qos.logback.slf4j来解决,也可以参见Eclipse RCP插件中多个slf4j绑定

如果您手动更改了插件选择,请小心并使用验证插件功能以确保您不会创建其他依赖关系问题。

如果您安装了其他插件,则可能会看到更多警告,例如来自checkstyle:

!ENTRY org.eclipse.ui 2 0 2017-09-04 10:09:32.926
!MESSAGE Warnings while parsing the commands from the 'org.eclipse.ui.commands' and 'org.eclipse.ui.actionDefinitions' extension points.
!SUBENTRY 1 org.eclipse.ui 2 0 2017-09-04 10:09:32.926
!MESSAGE Commands should really have a category: plug-in='net.sf.eclipsecs.ui', id='CheckstylePlugin.PurgeCaches', categoryId='net.sf.eclipsecs'

!ENTRY org.eclipse.ui 2 0 2017-09-04 10:09:33.622
!MESSAGE Warnings while parsing the commands from the 'org.eclipse.ui.commands' and 'org.eclipse.ui.actionDefinitions' extension points.
!SUBENTRY 1 org.eclipse.ui 2 0 2017-09-04 10:09:33.622
!MESSAGE Commands should really have a category: plug-in='net.sf.eclipsecs.ui', id='CheckstylePlugin.PurgeCaches', categoryId='net.sf.eclipsecs'

=> 这有点混乱。因此,复制“默认”警告并将其忽略可能是个好主意。这样更容易看出警告是否与您自己的插件/最新更改相关。
编辑
我对checkstyle警告进行了错误报告,感谢Lars Koedderitzsch,他们将在8.5.0版本中解决: https://sourceforge.net/p/eclipse-cs/bugs/428/

这实际上是我的情况。我正在使用Eclypse版本-Leon。这可能对其他人有用。谢谢,Stefan。 - ClickBright

7

在我的情况下,根本原因是预期的Java 8包和11之间的差异(其中'javax.xml.bind'已被弃用),这个解决方法对我有用。 - Gabor Szarnyas
谢谢,第一个链接帮我保存了插件项目。 - Manh Nguyen

3
如果您已安装EclipseLink 2.5.2,则这是一个已知的错误:https://bugs.eclipse.org/bugs/show_bug.cgi?id=456174 要修复该错误,请使用此更新站点更新到最新版本:http://download.eclipse.org/rt/eclipselink/updates/,选择比2.5.2更高的版本。
注意:添加更新站点后,我不得不取消选中“隐藏安装版本”复选框才能进行安装,因为它似乎认为已安装了该软件,但当我取消选中该框时,它显示该软件未安装。 安装新版本后,重新启动Eclipse,然后:
1. 选择菜单:Run -> Run Configurations 2. 单击“Add Required Bundles”按钮
之后应该一切正常。

1
如果您正在尝试使用具有功能的RCP E4应用程序,请在产品的“依赖项”窗格中将org.eclipse.e4.rcp添加到您的依赖项中。然后执行“添加所需项”。这解决了我的问题。

"product->dependencies" 是否意味着我必须使用插件的MANIFEST.MF文件的编辑器?(我无法在那里添加依赖项。)还是你有额外的产品/特性定义? - Stefan

0
如果你只是想忽略这些错误,可以前往“运行 > 运行配置 > 插件”,然后在底部取消选中“在启动前自动验证插件”。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接