在scala中,栈包语句to allow shorter imports是一种常见的做法,但是当我使用堆叠的包将文件加载到scala中,并且尝试使用从同一个组织开始的导入时,我会从似乎是表示编译器的地方得到一个编译器错误。代码在IDE外部的sbt中编译得很好。
下面是一个示例代码片段:
package com.coltfred
package util
package time
import com.github.nscala_time.time.Imports._在导入时,我得到了错误object github is not a member of package com.coltfred.util.com。
如果我将导入移到一行,错误就会消失,但是我们在代码库中经常使用这种做法,因此将它们全部更改为单行包语句将是一件痛苦的事。
为什么会发生这种事,我能做些什么来解决这个问题吗?
编辑:
我使用了eclipse插件来生成eclipse项目文件。目录结构应该是什么,所有的依赖项都在类路径中。
编辑2:
原来在util包的测试树中有一个文件(应该在同一个包中),但是在顶部有一个重复的package语句。我没有检查测试树,因为它不应该影响主树的编译,但显然我错了。
发布于 2013-10-10 05:04:49
这是一种常见的烦恼,它使帕尔普恼火地试图解决这个问题。他的想法是,不提供类文件的dir不应被视为包。如果您可以将util作为scala.util,则应该优先于使用该util为空的foo.util。
util dir是通常的嫌疑人,因为谁没有实用dir,特别是./util?
apm@mara:~/tmp/coltfred$ mkdir -p com/coltfred/util/time
apm@mara:~/tmp/coltfred$ mkdir -p com/coltfred/util/com
apm@mara:~/tmp/coltfred$ vi com/coltfred/util/time/test.scala
apm@mara:~/tmp/coltfred$ scalac com/coltfred/util/time/test.scala
./com/coltfred/util/time/test.scala:5: error: object github is not a member of package com.coltfred.util.com
import com.github.nscala_time.time._
^
one error found
apm@mara:~/tmp/coltfred$ cat com/coltfred/util/time/test.scala
package com.coltfred
package util
package time
import com.github.nscala_time.time._
class Test
apm@mara:~/tmp/coltfred$ 若要进行调试,请查找从何处加载违规包。
发布于 2013-10-09 23:57:21
不知道Scala为什么不喜欢这样,但是您可以使用_root_强制导入从顶层开始
import _root_.com.github.nscala_time.time.Imports._看看这是否能避免激怒IDE。
https://stackoverflow.com/questions/19284720
复制相似问题