【发布时间】:2019-11-02 16:53:55
【问题描述】:
我正在尝试使用名为 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都会生成以下8个类文件:
- 配置类
- 配置$.class
- Main$$anon$1$$anonfun$1.class
- Main$$anon$1.class
- Main$$anonfun$main$1.class
- Main$$anonfun$main$2.class
- Main.class
- Main$.class
但是当我直接调用scalac时,它只生成了以下五个类:
- 配置类
- 配置$.class
- Main$$anon$1.class
- Main.class
- Main$.class
当然,由于缺少类文件,我在尝试调用生成的 JAR 文件时会立即遇到运行时错误。但我不确定 SBT 或 Maven 在编译该代码时有何不同。即使有-verbose 标志,Maven 仍然是一个黑盒子——我对它可能调用的子进程没有任何了解。另一方面,SBT 确实可以选择运行export compile,这就是我所做的。但奇怪的是,当我运行 SBT 导出文件中报告的 完全相同 scalac 命令时,它仍然只构建了八个类文件中的五个。
这里有人了解 Scala 编译吗?是否有一些我需要传递给scalac 的标志我丢失了?如果有帮助,我可以发布我正在使用的确切 scalac 调用。
【问题讨论】:
标签: scala maven compilation sbt