如何在Java模块化项目中通过SFTP下载文件?
解决模块化Java项目中SFTP下载及jlink打包问题
方案一:更换为支持模块化的SFTP库
- Apache Mina SSHD:最新版本的
org.apache.sshd:sshd-sftp自带module-info.java,完全适配模块化项目。直接在pom.xml中引入对应版本替换原有依赖即可,它的SFTP API和主流库用法一致,迁移成本极低。 - 模块化分支版Jsch:用
com.github.mwiede:jsch替代原Jsch,这是原项目的维护分支,专门补了模块化支持,API完全兼容,不用改业务代码,换个依赖坐标就行。
方案二:给非模块化库补全模块信息(无需换库)
不想换库的话,用Moditect Maven插件给Jsch、Apache Commons Net这些无module-info的jar生成模块描述符:
- 在pom.xml里配置Moditect插件,指定要处理的依赖(比如jsch),设置自动模块名(比如
com.jcraft.jsch)。 - 执行
mvn moditect:add-module-info生成带module-info.java的修改版jar。 - 再运行
mvn javafx:jlink,此时这些库已是合法模块化jar,就能正常打包。
方案三:改用jpackage打包(兼容自动模块)
嫌上面步骤麻烦的话,直接用jpackage替代纯jlink。jpackage能基于你的可执行jar(含自动模块依赖)生成带JRE的安装包/镜像,对自动模块兼容性更好,不用强制所有依赖都是模块化的。执行mvn javafx:jpackage并配置好参数即可。
内容的提问来源于stack exchange,提问作者Dave
相关产品推荐
相关产品推荐

