(我认为)这是与Type not found: type .. when type is in src_managed folder不同的问题。
我是从1.1.1的sbt构建的,我已经在sbt中设置了一个代码生成任务,该任务可以按预期运行,并创建了许多具有相同结构的文件。
package com.a3.traffic
package object Vendor
它们被导入为以下其他文件:
import com.a3.traffic.Vendor._
文件在src_managed下生成。我尝试了两种不同的设置
src_managed / main / Vendor
src_managed / main / scala / com / a3 / traffic / Vendor
在两种情况下,我都会遇到以下错误:
[error] /Users/luis/IdeaProjects/SparkTrafficAllocation/core/src/main/scala/com/a3/traffic/Params.scala:5:28: object Vendor is not a member of package com.a3.traffic
[error] import com.a3.traffic.Vendor._
我可以通过将已生成的代码移至src / main / scala / com / a3 / traffic / Vendor(与我的代码其余部分一起使用)来解决此问题,但是我明白了。
[error] /Users/luis/IdeaProjects/SparkTrafficAllocation/core/target/scala-2.11/src_managed/main/scala/com/a3/traffic /Vendor/Vendor.scala:3:16: package is already defined as package object Vendor
[error] package object Vendor {
我觉得这很令人困惑。从我的代码中看不到src_managed中定义的对象,但可以看到该包中的内容。如何使src_managed中的对象可用于该包的其余部分?
编辑 我创建了一个最小项目来显示此https://github.com/sisamon/MinimalApp
编辑2 我正在使用名称/ package.scala / package.scala =>对象名称作为原始名称。scalacase类/ case对象不起作用。
答案 0 :(得分:2)
问题出在here。
def generator (x: Country) = {
generateADT("Vendor", x.vendor)
generateADT("InstallationType", x.installationType)
}
请记住,您的任务必须返回一个<{>> 生成的Seq
和 ALL Files
。 / p>
而且,您的generateADT
每个都返回一个Seq
中的File
,因此,您只返回了上次呼叫(其中在这种情况下是Seq
),这就是为什么找不到您的InstallationType
的原因!
您可以通过注释第二行来进行检查,这将使第一行返回,在这种情况下将找到Vendor
!
有几种方法可以解决此问题,最简单,最优雅的(IMHO)是这样的:
Vendor
PS:作为建议,您应该显式放置所有函数/方法的返回类型。不仅可以帮助进行其他类型的类型推断,还可以避免几个编译错误并提高代码的可读性。