PowerShell下运行Maven多模块Java程序报Unexpected token错误求助
问题根因
这个报错和Java代码、Maven的pom配置没有关系,是PowerShell的语法解析规则和传统cmd不兼容导致的解析错误。
你当前用的终端是Windows PowerShell,不是旧版的cmd命令提示符。PowerShell内置语法里,分号;是独立的命令分隔符——哪怕每个jar路径都单独用双引号包起来,紧跟在右引号后面的分号会被PowerShell判定为“前面的内容已经是一个完整独立的命令”,后续拼接的剩余类路径内容、主类名com.lynda.App就会被当成无意义的非法表达式,直接触发解析报错。
解决办法
- 调整类路径的引号包裹逻辑:把所有jar路径串成一个整体,用一对外层双引号包住带分号的完整路径串,避免PowerShell拆分参数。调整后的可执行命令如下:
java -cp "C:\Users\user\.m2\repository\com\lynda\app\1.0\app-1.0.jar;C:\Users\user\Documents\Learn\Maven\Ex_Files_MMB_Maven\Exercise Files\Ch01\01_06\sample-multi-app\createFile\target\createFile-1.0.jar;C:\Users\user\Documents\Learn\Maven\Ex_Files_MMB_Maven\Exercise Files\Ch01\01_06\sample-multi-app\madLib\target\madLib-1.0.jar" com.lynda.App
- 如果习惯原来cmd下的命令写法,直接把终端切换为传统cmd命令提示符,你原来写的那串带分号、每个路径单独包引号的命令也可以正常运行,cmd会正常把分号识别为类路径分隔符传给Java程序,不会拆分命令。
- 针对Maven多模块项目的长期优化:完全没必要手动拼这么长的类路径。可以在app模块的pom中配置maven-jar-plugin,指定启动主类、自动关联本地仓库的依赖jar路径,后续直接用
java -jar运行打包好的app包就行,省得每次手动拼路径容易出错。
后续注意事项:等命令能正常被终端解析后,记得核对App.java里硬编码的words.txt文件路径,确保和你本地实际的项目目录结构完全匹配,不然会触发代码里声明抛出的FileNotFoundException。
内容的提问来源于stack exchange,提问作者likejudo
相关产品推荐
相关产品推荐

