Scala多项目跨项目导入类失败,配置dependsOn仍报错求助
解决Scala多项目跨项目导入类的问题
1. 确认sbt多项目配置是否正确
首先要确保你的build.sbt是标准多项目结构,正确声明子项目并配置依赖:
lazy val project1 = (project in file("project1")) .settings( scalaVersion := "2.12.12" ) .dependsOn(project2) // 明确project1依赖project2 lazy val project2 = (project in file("project2")) .settings( scalaVersion := "2.12.12" // 两个子项目必须使用相同的Scala版本 )
若build.sbt不是这种多项目结构,dependsOn配置不会生效。
2. 修正代码中的方法调用错误
你的bbb1是类,bFunction是实例方法,不能直接在aaa1中调用bFunction(),必须先实例化bbb1:
import com.foo2.bar.bbb._ class aaa1() { def aFunction() = { val bInstance = new bbb1() // 创建bbb1实例 val t = bInstance.bFunction() // 通过实例调用方法 } }
如果想直接调用方法,可以把bbb1改成伴生对象(实现类似静态方法的效果):
// bbb1.scala object bbb1 { def bFunction() = { // some function } }
修改后就能直接在aaa1中调用bFunction()了。
3. 修复IntelliJ索引/缓存问题
即使sbt配置正确,IntelliJ偶尔会出现索引异常:
- 点击右侧SBT面板的刷新按钮(🔄)重新加载项目
- 执行
File -> Invalidate Caches...,选择"Invalidate and Restart"重启IDE - 确保IntelliJ的Scala插件版本与Scala 2.12.12兼容
4. 核对包路径与类名正确性
- 确认
project2中bbb1.scala的包路径确实是com.foo2.bar.bbb,文件目录结构要与包名完全对应 - Scala对大小写敏感,确保类名
bbb1与导入语句中的名称完全一致
5. 用sbt命令行验证编译结果
先跳过IDE,用命令行编译确认问题根源:
sbt project1/compile
如果命令行编译成功,说明问题出在IntelliJ的缓存或配置;如果命令行也报错,重点检查sbt配置或代码逻辑。
内容的提问来源于stack exchange,提问作者coder mate
相关产品推荐
相关产品推荐

