如何用批处理脚本运行含多文件与Maven依赖的IntelliJ Kotlin项目?
问题:多文件Kotlin项目+Maven依赖的批处理运行报错(未解析引用)
我有一个IntelliJ Kotlin项目,包含多份文件(部分位于子目录),且依赖apache.poi与apache.poi.ooxml这两个Maven库。已能用批处理脚本运行单文件项目,但添加更多文件后出现“未解析引用”错误。
Main.kt代码
fun main(args: Array<String>) { println("Hello World!") worker.prepareXlsxToAirtable() println("Program is finished") }
可运行的单文件批处理脚本(注释worker行时)
cd C:\Users\user\IdeaProjects\AppsApiScript call kotlinc src\main\kotlin\Main.kt -d bin kotlin -cp bin MainKt pause
报错信息
C:\Users\user\IdeaProjects\AppsApiScript>call kotlinc src\main\kotlin\Main.kt -d bin src\main\kotlin\Main.kt:3:5: error: unresolved reference: worker worker.prepareXlsxToAirtable() ^ Hello World! Program is finished C:\Users\user\IdeaProjects\AppsApiScript>
解决方案
1. 编译所有Kotlin源文件(含子目录)
原脚本仅编译了Main.kt,未处理其他依赖文件(如worker相关类),导致引用无法解析。需用递归通配符指定所有Kotlin文件:
call kotlinc src\main\kotlin\**/*.kt -d bin
说明:**/*.kt会递归匹配src\main\kotlin下所有子目录中的.kt文件,确保所有依赖类都被编译到bin目录。
2. 引入Maven依赖Jar包
项目依赖的apache.poi和apache.poi.ooxml需要在编译和运行时加入类路径:
- 在项目根目录新建
lib文件夹,将apache.poi、apache.poi.ooxml及其所有依赖Jar包放入其中(比如poi-ooxml-schemas.jar、xmlbeans.jar等) - 修改批处理脚本,在编译和运行命令中加入
lib目录的Jar包
完整的批处理脚本
@echo off cd C:\Users\user\IdeaProjects\AppsApiScript :: 编译所有Kotlin文件,同时引入lib下的依赖Jar call kotlinc src\main\kotlin\**/*.kt -classpath "lib/*.jar" -d bin :: 运行时指定类路径(bin为编译后的类文件,lib为依赖Jar) kotlin -cp "bin;lib/*.jar" MainKt pause
注意事项
- 确保
lib目录包含apache.poi和apache.poi.ooxml的全部依赖Jar,遗漏会导致运行时错误 - Windows系统类路径分隔符用
;,若为Linux/macOS则替换为: worker类需与Main.kt同包或设为public,避免访问权限问题
内容的提问来源于stack exchange,提问作者Nikita Avramenko
相关产品推荐
相关产品推荐

