Scala导入无法正常工作 - 对象数据库不是com.me.project.controllers.com.me.project.database包的成员

时间:2014-02-11 12:09:07

标签: scala

尝试在scala中导入时出现问题。对象Database存在于com.me.project.database下,但是当我尝试导入它时:

import com.me.project.database.Database

我收到错误:

object Database is not a member of package com.me.project.controllers.com.me.project.database

任何想法是什么问题?

修改

值得一提的是导入是在包com.me.project.controllers下的Application.scala文件中,我无法弄清楚为什么它会将导入附加到当前包中,但很奇怪......

编辑2

所以使用:

import _root_.com.me.project.database.Database

如下所述工作。但它应该在没有_root_的情况下工作吗?到目前为止的评论似乎表明它应该。

答案

事实证明,我只需要使用以下两种方法清理项目以使导入正常工作:

import _root_.com.me.project.database.Database

import com.me.project.database.Database

是有效的解决方案。 Eclipse刚刚感到困惑。

12 个答案:

答案 0 :(得分:18)

进口可以是相对的。这是你唯一的进口吗?小心其他导入,如

import com.me

最终,这应该解决它,然后你可以尝试找到更多关于它:

import _root_.com.me.project.database.Database

答案 1 :(得分:17)

在我的情况下,我还需要检查找不到作为包成员的对象是否已成功编译。

答案 2 :(得分:10)

在我的情况下,我必须运行sbt clean

答案 3 :(得分:9)

我意识到这个问题已经有了一个公认的答案,但由于我遇到了同样的问题,但由于原因不同,我想我会添加一个答案。

我有一堆相互依赖的项目,突然需要根导入才能编译。原来,我在一个文件中复制了包声明。这引起了某种连锁反应,很难找到问题的根源。

总结我有

package foo.bar
package foo.bar

位于文件顶部,而不仅仅是

package foo.bar

希望这可以为某些人节省一些非常繁琐的错误。

答案 4 :(得分:2)

如果您使用gradle作为构建工具,请确保未禁用jar任务。

我的项目中有多个模块,其中一个模块依赖于其他一些模块。但是,我在jar中禁用了build.gradle任务:

jar { enabled = false }

这导致它无法解析依赖模块中的类,并因上述错误而失败。

答案 5 :(得分:1)

Java - >没有清理的Scala转换

如果将项目中的某些文件从Java转换为Scala,请不要忘记清理。在我将Java类转换为Scala对象之后,即使构建在本地工作,我仍然有一个持续集成构建运行,在那里我无法工作。解决方案:将“clean”添加到CI服务器上的构建过程。我相信,Scala中生成的.class文件的名称与Java类略有不同,因此很可能是导致该问题的原因。

答案 6 :(得分:1)

我将分享我的故事,以防它可以帮助某人。

场景: intellij编译成功,但是import com.foo.Bar上的gradle构建失败,其中Bar是一个scala类。

TLDR原因: Bar位于src/main/java/...下方,而不是src/main/scala/...

实际原因: Bar未被compileScala gradle任务(来自gradle scala插件)​​编译,因为它仅在src/<sourceSet>/scala下查找scala源。

来自docs.gradle.org

  

所有Scala源目录都可以包含Scala和Java代码。该   Java源目录可能包含Java源代码。

希望这有帮助

答案 7 :(得分:0)

我有类似的情况,在命令行上IntelliJ和maven都失败了。我去应用建议的临时修复(添加_root_)但是intellij非常糟糕,甚至不可能。

最后我注意到我错误地创建了一个包,所以它重复了包的整个路径。这意味着我的类所在的目录有一个名为“com”的子文件夹,我的文件的开头看起来像:

package com.mycompany.mydept.myproject.myfunctionality.sub1

import com.holdenkarau.spark.testing.DataFrameSuiteBase 

我有另一个名为的包 com.mycompany.mydept.myproject.myfunctionality.sub1.com.mycompany.mydept.myproject.myfunctionality.sub2

编译器在com.mycompany.mydept.myproject.myfunctionality.com下寻找“holdenkarau”并失败。

答案 8 :(得分:0)

我有一个类似的问题,但是这里没有解决方案对我有用。但是,有效的方法是简单重启了机器。

也许这与我的Intellij有关,但是在快速重启后,一切似乎都工作正常。

答案 9 :(得分:0)

我在使用Intellij和内置的 sbt shell 时遇到了这个问题(准确地说,我正在尝试运行命令 console ,该命令会调用编译器检查码)。

以我为例,在该线程上尝试了其他建议的解决方案后,我发现可以重新启动 sbt shell ,它将消失。环形绿色箭头的左侧有一个按钮,灰色的小方块可以一键完成(显然,这受Jet Brains的约束,不能更改IDE的设计!!!)。

我希望这可以帮助某些人快速解决此问题。

答案 10 :(得分:0)

我曾经遇到过类似的问题,即IntelliJ从同一项目中导入一个文件时显示错误。

在我的情况下,什么不能解决问题:

  1. 在导入语句中添加_root_
  2. 清洁sbt
  3. 重启机器

实际解决问题的方法:

  1. 主菜单=>选择文件=>单击使高速缓存无效/重新启动=>弹出菜单=>单击使高速缓存无效并重新启动。

我在macOs mojave 10.14.6上使用IDEA(2019.2.2 Ultimate Edition)

答案 11 :(得分:0)

就我而言,在Intellij中,只需将包文件重命名为其他文件>>看看它是否更新了导入语句>>运行代码>>然后重命名回原来的名称即可。