You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Eclipse PTP启动报错:找不到com.sun.xml.internal.bind.v2.ContextFactory提供者

解决Eclipse PTP在OpenJDK 11下调试MPI程序的JAXB ContextFactory错误

根据你描述的问题,核心原因是OpenJDK 11移除了Java EE相关的内置模块(包括JAXB),而你使用的Eclipse Parallel 2019-03-R中的PTP插件版本依赖旧的com.sun.xml.internal.bind实现,导致启动时找不到指定的工厂类。下面是几个可行的解决思路,按推荐优先级排序:

一、升级到兼容OpenJDK 11的新版Eclipse Parallel Tools

你之前尝试的Photon-R(2018-09)版本太老,对JDK11的支持不完善,而2019-03-R的PTP插件也未完全适配JDK11的模块化变化。建议直接下载2020-06及以后版本的Eclipse Parallel Tools(比如最新的2023-09版),这些版本已经更新了PTP插件的依赖,原生支持OpenJDK11,能避免JAXB相关的错误。

操作步骤很简单:

  • 卸载旧版Eclipse(保留工作区即可)
  • 从官方下载对应版本的Eclipse Parallel安装包
  • 安装后重新配置MPI运行环境,选择Generic OpenMPI InteractiveLocal连接类型,应该就能正常启动调试了。

二、给现有Eclipse手动添加JAXB依赖并修改启动参数

如果不想升级Eclipse,可以手动补充JAXB的第三方实现,让PTP插件能找到所需的工厂类:

  1. 下载JAXB相关依赖包
    需要以下4个JAR包(推荐版本2.3.1,确保兼容性):

    • jaxb-api-2.3.1.jar
    • jaxb-impl-2.3.1.jar
    • jaxb-core-2.3.0.jar
    • javax.activation-1.2.0.jar
  2. 配置Eclipse的Dropins插件

    • 在Eclipse安装目录下创建dropins/jaxb文件夹
    • 将下载的4个JAR包放入该文件夹
    • dropins/jaxb下新建bundle.info文件,内容如下:
      Bundle-Name: JAXB Dependencies
      Bundle-SymbolicName: com.sun.jaxb.dependencies
      Bundle-Version: 2.3.1
      Bundle-ClassPath: jaxb-api-2.3.1.jar, jaxb-impl-2.3.1.jar, jaxb-core-2.3.0.jar, javax.activation-1.2.0.jar
      Export-Package: javax.xml.bind, javax.xml.bind.annotation, javax.xml.bind.annotation.adapters, javax.xml.bind.attachment, javax.xml.bind.helpers, javax.xml.bind.util, com.sun.xml.bind.v2, com.sun.xml.bind.v2.annotation, com.sun.xml.bind.v2.model.annotation, com.sun.xml.bind.v2.model.core, com.sun.xml.bind.v2.model.impl, com.sun.xml.bind.v2.model.nav, com.sun.xml.bind.v2.model.runtime, com.sun.xml.bind.v2.runtime, com.sun.xml.bind.v2.runtime.annotation, com.sun.xml.bind.v2.runtime.reflect, com.sun.xml.bind.v2.runtime.unmarshaller, com.sun.xml.bind.v2.runtime.marshaller, com.sun.xml.bind.v2.util
      Bundle-ManifestVersion: 2
      
  3. 修改Eclipse启动参数
    打开Eclipse安装目录下的eclipse.ini,在末尾添加一行:

    -Djavax.xml.bind.JAXBContextFactory=com.sun.xml.bind.v2.ContextFactory
    
  4. 重启Eclipse,重新配置MPI运行环境,测试是否解决启动错误。

三、降级到OpenJDK 8

如果以上方案都不适用,可以考虑降级JDK版本:

  • 在Ubuntu 18.04上安装OpenJDK 8:sudo apt install openjdk-8-jdk
  • 打开Eclipse的Window > Preferences > Java > Installed JREs,添加OpenJDK 8并设为默认
  • 此时可以尝试使用2017年之前的Eclipse版本(比如Neon版),这些版本对JDK8的支持完善,PTP插件也能正常工作,不会出现JAXB相关问题。

替代调试方案

如果Eclipse PTP始终有问题,也可以试试这些替代方式:

  • 使用gdb-mpi:在终端中直接运行mpiexec -n <进程数> gdb --args <你的MPI程序>,配合GDB的多进程调试命令(比如set detach-on-fork off)进行调试
  • 使用Visual Studio Code:安装MPI相关插件(比如OpenMPI Debugger),VSCode对OpenJDK11的支持更好,配置流程也更简洁。

内容的提问来源于stack exchange,提问作者CW Jin

火山引擎 最新活动