尝试在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刚刚感到困惑。
答案 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源。
所有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从同一项目中导入一个文件时显示错误。
在我的情况下,什么不能解决问题:
_root_
实际解决问题的方法:
我在macOs mojave 10.14.6上使用IDEA(2019.2.2 Ultimate Edition)
答案 11 :(得分:0)
就我而言,在Intellij中,只需将包文件重命名为其他文件>>看看它是否更新了导入语句>>运行代码>>然后重命名回原来的名称即可。