我正在尝试使用名为Please的专有构建工具来构建一个简单的Scala项目。它的作用是有效地在源文件上调用scalac
以构建适当的文件,然后将它们打包在一起。不幸的是,我发现它缺少一些必要的类文件,因此我开始通过直接直接调用scalac
进行实验。
我已经使用Maven和SBT正确构建了项目。这是我的主要课程的代码:
package com.mypackage
case class Config(input: String = null)
object Main {
val parser = new scopt.OptionParser[Config]("testapp") {
arg[String]("input") action { (x, c) => c.copy(input = x) } text("input value")
}
def main(args: Array[String]) {
parser.parse(args, Config()) map { config =>
val input = config.input
println("input value is " + input)
} getOrElse {
System.exit(1)
}
}
}
我注意到在src/main/scala/com/myproject
文件夹下,Maven和SBT都将生成以下八个类文件:
但是当我直接调用scalac
时,它只会生成以下五个类:
当然,由于缺少类文件,当尝试调用生成的JAR文件时,我立即遇到运行时错误。但是我不确定SBT或Maven在编译该代码方面有何不同。即使使用-verbose
标志,Maven仍然是一个黑匣子-我对它可能正在调用哪些子流程一无所知。另一方面,SBT确实具有运行export compile
的选项,这就是我所做的。不过,奇怪的是,当我运行SBT导出文件中报告的完全相同 scalac
命令时,它仍然仅生成八个类文件中的五个。
这里有人对Scala编译了解很多吗?是否需要传递一些我丢失的标志到scalac
?如果有帮助,我可以发布确切的scalac
调用。
答案 0 :(得分:4)
您正在使用两种不同的Scala版本。
您似乎已设置Maven和sbt以使用Scala 2.11,它会生成额外的匿名类,但是命令行scalac
必须是使用JVM lambda的Scala 2.12(如果不是2.13)。 / p>