使用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
相关产品推荐
相关产品推荐

