如何通过Maven命令行运行支持STDIN的Java程序并解决依赖报错
两种方案均可快速解决,可根据你的实际使用场景选择:
如果后续项目需要在无Maven环境的设备上部署运行,优先修复第一种方式的类路径问题;如果仅为开发阶段本地调试使用,调整第二种方式的参数即可快速满足需求。
第一种方式问题修复
报错的核心原因是类路径配置与实际依赖存放路径不匹配:
- 你执行
mvn dependency:copy-dependencies后依赖存放在target/dependencies目录,但你java命令中类路径写的是相对路径dependency,路径不对导致JVM无法加载到对应的依赖类。 - 修正后的运行命令如下(Linux/macOS环境):
如果你是Windows环境,需要把类路径中的冒号java -cp "target/Main-1.0-SNAPSHOT.jar:target/dependencies/*" com.company.main.Main:替换为分号;。 - 额外优化:可以在pom中配置
maven-shade-plugin或者maven-assembly-plugin,将所有依赖和你的业务代码打包为单个可执行jar包,后续直接执行java -jar 打包后的文件名.jar即可运行,不需要手动配置类路径。
第二种方式STDIN支持方案
mvn exec:java默认不会透传STDIN输入,调整执行参数即可支持:
- 把执行目标从
exec:java改为exec:exec,同时指定执行的程序为java,完整命令如下:mvn exec:exec -Dexec.executable="java" -Dexec.args="-classpath %classpath com.company.main.Main" < input.txt - 该方式不需要修改项目配置,直接兼容STDIN重定向逻辑,适合本地开发调试使用。
内容的提问来源于stack exchange,提问作者paul88
相关产品推荐
相关产品推荐

