You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在JavaFX应用中引入Jython遇模块包冲突问题求助

JavaFX + Jython + Maven 模块包冲突问题解决

问题场景

在IntelliJ IDE中通过Maven搭建JavaFX应用,引入Jython以添加Python脚本能力,当前相关配置如下:

Maven依赖(核心部分)

<dependency>
    <groupId>org.openjfx</groupId>
    <artifactId>javafx-fxml</artifactId>
    <version>19.0.2.1</version>
</dependency>
<!-- 已引入的Jython依赖 -->
<dependency>
    <groupId>org.python</groupId>
    <artifactId>jython</artifactId>
    <version>2.7.3</version>
</dependency>

module-info.java配置

module com.example.application {
    requires javafx.controls;
    requires javafx.fxml;
    requires java.sql;
    requires java.desktop;
    requires jython;

    opens Example.application.main to javafx.fxml;
    exports Example.application.main;
}

运行错误信息

java: java.lang.reflect.InvocationTargetException
Module jython contains package org.w3c.dom.html, module jdk.xml.dom exports package org.w3c.dom.html to jython

问题原因

Jython的jar包内置了org.w3c.dom.html包,而JDK自带的jdk.xml.dom模块也导出了同名包,Java模块系统不允许两个模块(自动模块Jython与JDK官方模块)存在重复包,因此触发冲突。

解决方法

方法1:将Jython作为类路径依赖(最常用)

  1. 修改module-info.java,删除requires jython;这一行,不再将Jython视为模块依赖。
  2. 保持Maven中Jython依赖的默认配置,让它被加载到类路径而非模块路径。
  3. 在IntelliJ的运行配置中添加VM参数,让JDK将冲突包导出给未命名模块(类路径依赖都归属于未命名模块):
    --add-exports jdk.xml.dom/org.w3c.dom.html=ALL-UNNAMED
    

方法2:保留模块依赖并调整导出规则

如果必须将Jython作为模块依赖使用,直接在运行VM参数中添加以下指令,让JDK明确将冲突包导出给Jython模块:

--add-exports jdk.xml.dom/org.w3c.dom.html=jython

注意事项

不要尝试通过Maven排除Jython中的org.w3c.dom.html包——该包是Jython自身jar的组成部分,Maven的依赖排除功能仅能处理传递依赖,无法修改Jython自身的jar内容。

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 15:47:30