Java Card 3.0.x Eclipse插件创建小程序报JAXBException求助
Java Card Eclipse插件创建项目时JAXBException错误解决
问题背景
之前用Eclipse+Java Card插件开发小程序,切换到Java Card 3.0.x版本时,安装了Oracle官网的运行时包java_card_devkit_tools-bin-v24.0-b_57-20-FEB-2024.zip和对应Eclipse插件java_card_devkit_eclipse_plugin-bin-v24.0-b_50-20-FEB-2024,但创建新Java Card小程序的最后一步,项目向导报错:
创建Java Card项目时出错。javax/xml/bind/JAXBException
查资料得知,这个问题是因为新版本Java运行时移除了JAXB组件,但Oracle的Java Card插件依赖它。网上大部分解决方案是修改应用源码(比如Spring项目)或通过Maven/Gradle添加依赖,但这个错误出在IDE内部,没法修改Eclipse或插件的源码。有人建议安装eclipse-ee4j,但下载后不知道怎么添加到Eclipse里,而且目前还没创建出项目,没有可修改的源码。
环境信息
- Eclipse版本:2024-03 (4.31.0),Build id:20240307-1437
- Java版本:18.0.2(Oracle)
- 测试过的另一个环境:Eclipse IDE for Enterprise Java and Web Developers,Java 17.0.10(Eclipse Adoptium),同样报错
错误日志
Java 18环境下的错误日志
org.eclipse.core.resources Error 4 Problems occurred when invoking code from plug-in: "org.eclipse.core.resources". java.lang.NoClassDefFoundError: javax/xml/bind/JAXBException at com.oracle.javacard.jcdk.core.ResourceDeltaProcessor.visit(ResourceDeltaProcessor.java:44) at org.eclipse.core.internal.events.ResourceDelta.accept(ResourceDelta.java:77) at org.eclipse.core.internal.events.ResourceDelta.accept(ResourceDelta.java:87) at org.eclipse.core.internal.events.ResourceDelta.accept(ResourceDelta.java:61) at com.oracle.javacard.jcdk.core.Activator$1.resourceChanged(Activator.java:96) at org.eclipse.core.internal.events.NotificationManager$1.run(NotificationManager.java:321) at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:47) at org.eclipse.core.internal.events.NotificationManager.notify(NotificationManager.java:311) at org.eclipse.core.internal.events.NotificationManager.broadcastChanges(NotificationManager.java:174) at org.eclipse.core.internal.resources.Workspace.broadcastPostChange(Workspace.java:458) at org.eclipse.core.internal.resources.Workspace.endOperation(Workspace.java:1586) at org.eclipse.core.internal.resources.Workspace.run(Workspace.java:2462) at org.eclipse.core.internal.resources.Workspace.run(Workspace.java:2473) at org.eclipse.jdt.core.JavaCore.run(JavaCore.java:6082) at org.eclipse.jdt.internal.ui.actions.WorkbenchRunnableAdapter.run(WorkbenchRunnableAdapter.java:108) at org.eclipse.jface.operation.ModalContext$ModalContextThread.run(ModalContext.java:124) Caused by: java.lang.ClassNotFoundException: javax.xml.bind.JAXBException cannot be found by com.oracle.javacard.jcdk.core_1.0.0.201505220623 at org.eclipse.osgi.internal.loader.BundleLoader.generateException(BundleLoader.java:562) at org.eclipse.osgi.internal.loader.BundleLoader.findClass0(BundleLoader.java:557) at org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:434) at org.eclipse.osgi.internal.loader.ModuleClassLoader.loadClass(ModuleClassLoader.java:174) at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:521) ... 16 more
Java 17环境下的错误日志
eclipse.buildId=4.31.0.20240307-1200 java.version=17.0.10 java.vendor=Eclipse Adoptium BootLoader constants: OS=win32, ARCH=x86_64, WS=win32, NL=en_US Framework arguments: -product org.eclipse.epp.package.jee.product Command-line arguments: -os win32 -ws win32 -arch x86_64 -product org.eclipse.epp.package.jee.product -data file:/C:/Users/E/eclipse-workspace305/ org.eclipse.core.resources Error Sat May 11 12:04:06 GMT+03:30 2024 Problems occurred when invoking code from plug-in: "org.eclipse.core.resources". java.lang.NoClassDefFoundError: javax/xml/bind/JAXBException at com.oracle.javacard.jcdk.core.ResourceDeltaProcessor.visit(ResourceDeltaProcessor.java:44) at org.eclipse.core.internal.events.ResourceDelta.accept(ResourceDelta.java:77) at org.eclipse.core.internal.events.ResourceDelta.accept(ResourceDelta.java:87) at org.eclipse.core.internal.events.ResourceDelta.accept(ResourceDelta.java:61) at com.oracle.javacard.jcdk.core.Activator$1.resourceChanged(Activator.java:96) at org.eclipse.core.internal.events.NotificationManager$1.run(NotificationManager.java:321) at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:47) at org.eclipse.core.internal.events.NotificationManager.notify(NotificationManager.java:311) at org.eclipse.core.internal.events.NotificationManager.broadcastChanges(NotificationManager.java:174) at org.eclipse.core.internal.resources.Workspace.broadcastPostChange(Workspace.java:458) at org.eclipse.core.internal.resources.Workspace.endOperation(Workspace.java:1586) at org.eclipse.core.internal.events.AutoBuildJob.doBuild(AutoBuildJob.java:221) at org.eclipse.core.internal.events.AutoBuildJob.run(AutoBuildJob.java:300) at org.eclipse.core.internal.jobs.Worker.run(Worker.java:63) Caused by: java.lang.ClassNotFoundException: javax.xml.bind.JAXBException cannot be found by com.oracle.javacard.jcdk.core_1.0.0.201505220623 at org.eclipse.osgi.internal.loader.BundleLoader.generateException(BundleLoader.java:562) at org.eclipse.osgi.internal.loader.BundleLoader.findClass0(BundleLoader.java:557) at org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:434) at org.eclipse.osgi.internal.loader.ModuleClassLoader.loadClass(ModuleClassLoader.java:174) at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:525) ... 14 more
解决方案
方案1:使用Java 8运行Eclipse
JAXB是Java 8的内置组件,用Java 8启动Eclipse可以直接解决依赖问题:
- 下载Java 8(Oracle或OpenJDK版本均可)
- 找到Eclipse安装目录下的
eclipse.ini文件,用文本编辑器打开 - 在
-vmargs行之前添加Java 8的javaw.exe路径,示例:-vm C:\Program Files\Java\jdk1.8.0_391\bin\javaw.exe - 保存文件后重启Eclipse,再尝试创建Java Card项目
方案2:给Eclipse添加JAXB模块参数(Java 11+适用)
如果不想更换Java版本,可以通过修改Eclipse启动参数引入JAXB模块:
- 打开
eclipse.ini文件,在-vmargs行下方添加:--add-modules=java.xml.bind - 保存并重启Eclipse
方案3:安装Eclipse EE4J插件
按照以下步骤安装EE4J插件:
- 打开Eclipse,点击顶部菜单栏的
Help->Eclipse Marketplace - 在搜索框输入
Eclipse EE4J,找到对应插件后点击Install - 按照提示完成安装,重启Eclipse后再尝试创建项目
内容的提问来源于stack exchange,提问作者VSB
相关产品推荐
相关产品推荐

