Vaadin 23.3.19 Gradle插件JNA与Oshi依赖冲突求助
Vaadin 23.3.19 Gradle插件类路径冲突问题解决
问题原因解析
你遇到的插件类路径冲突,核心原因是Gradle插件的类加载并非完全隔离:
- Vaadin的
vaadinBuildFrontend任务执行时,默认会包含项目的运行时类路径,而非仅使用插件自身的类路径。 - Vaadin 23.3.19本身依赖特定版本的
oshi和jna,如果你强行指定的版本(oshi 6.4.1、jna 5.13.0)与插件内置依赖版本不兼容,就会触发类方法缺失错误(比如Memory.close()是JNA 5.x新增的方法,若插件依赖旧版JNA就会找不到)。 - 仅在项目依赖中统一版本无效,因为插件的buildscript类路径仍会加载自身依赖的旧版本,与项目依赖的新版本产生冲突。
解决方案步骤
1. 排查插件与项目的依赖版本
先执行Gradle命令查看插件和项目依赖的实际版本,定位冲突点:
./gradlew dependencies --configuration buildscript ./gradlew dependencies --configuration vaadinRuntimeClasspath
找到com.github.oshi:oshi-core和net.java.dev.jna:jna/jna-platform在两个配置中的版本差异。
2. 统一插件与项目的依赖版本
在buildscript中排除插件自带的冲突依赖,手动添加兼容的统一版本,确保插件和项目使用同一套依赖:
buildscript { repositories { mavenCentral() } dependencies { classpath("com.vaadin:vaadin-gradle-plugin:23.3.19") { // 排除插件自带的冲突依赖 exclude group: 'com.github.oshi', module: 'oshi-core' exclude group: 'net.java.dev.jna', module: 'jna' exclude group: 'net.java.dev.jna', module: 'jna-platform' } // 添加兼容的统一版本 classpath("com.github.oshi:oshi-core:6.4.1") classpath("net.java.dev.jna:jna:5.13.0") classpath("net.java.dev.jna:jna-platform:5.13.0") } }
同时在项目依赖中保持版本一致(如果项目需要直接依赖这些库):
dependencies { implementation("com.github.oshi:oshi-core:6.4.1") { exclude group: 'net.java.dev.jna' } implementation("net.java.dev.jna:jna:5.13.0") implementation("net.java.dev.jna:jna-platform:5.13.0") // 其他Vaadin依赖... }
3. 强制vaadinBuildFrontend使用插件类路径
修改任务配置,让它仅使用插件的buildscript类路径,避免加载项目依赖的冲突版本:
tasks.named('vaadinBuildFrontend') { classpath = project.buildscript.configurations.classpath }
4. 验证修复
执行./gradlew clean vaadinBuildFrontend,检查是否还存在Memory.close()不存在的错误。
内容的提问来源于stack exchange,提问作者Martin Ahrer
相关产品推荐
相关产品推荐

