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

使用Gradle JavaFX插件时ServiceLoader无法定位实现的问题求助

JavaFX插件与ServiceLoader冲突问题求助

我正在开发一个程序,核心逻辑与GUI分离,以服务形式在运行时加载。折腾了数周都没解决运行时无法发现实现类的问题,后来将最小化的ServiceLoader示例适配到项目结构中,才定位到是org.openjfx.javafxplugin插件干扰了功能。目前使用的是0.0.10版本,最新的0.0.13版本还会额外出现主类找不到的问题,因此暂时只能用旧版本。这个插件是JavaFX GUI项目必需的,但运行ServiceLoader代码并不需要它。

不引入该插件时,ServiceLoader完全正常工作,实现类能被加载,程序输出符合预期;但一旦引入插件,程序就无法正常运行。现在陷入了两难——JavaFX应用必须依赖这个插件,求各位提供解决方案。

我的Gradle项目包含三个子模块:api、core(实现模块)、tlclient(GUI应用模块),相关文件如下:

API模块

module-info.java

module tlapi {
  exports com.chesolver.spi;
  exports com.chesolver;
}

build.gradle

plugins {
    id 'tubesheetlayout.java-library-conventions'
}

还有一个奇怪的现象:启用JavaFX插件后,编译器会报错:com.chesolver.spi.Library: module tlapi does not declare 'uses'。但tlapi是API模块,com.chesolver.spi.Library就是该模块中的接口,实在搞不懂为什么会报这个错。

core模块

module-info.java

module tlcore {
    requires tlapi;
}

build.gradle

plugins {
    id 'tubesheetlayout.java-library-conventions'
    id 'org.javamodularity.moduleplugin' version '1.8.9'
}

dependencies {
    implementation project(':api')
}

tlclient(应用模块)

module-info.java

module tlclient {
    requires tlapi;
}

build.gradle

plugins {
    id 'tubesheetlayout.java-application-conventions'

    // *注意* 取消注释后ServiceLoader代码无法工作
    //id 'org.openjfx.javafxplugin' version '0.0.13'
    
    //id 'org.javamodularity.moduleplugin' version '1.8.9'
}

dependencies {
    implementation project(':api')
    implementation project(':core')
}

application {
    mainClass = "com.chesolver.library.LibraryClient"
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 19:40:38