Я пытаюсь получить простой проект Scala для сборки с использованием проприетарного инструмента сборки под названием Please .То, что он делает, фактически вызывает 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 сгенерируют следующие восемь файлов классов:
- Config.class
- Config $ .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
напрямую, он генерирует только следующие пять классов:
- Config.class
- Config $ .class
- Main $$ anon $ 1.class
- Main.class
- Main $ .class
Конечно, с отсутствующими файлами классов, я сразу же сталкиваюсь с ошибками во время выполнения при попытке вызвать результирующийФайл JAR.Но я не уверен, что SBT или Maven делают по-разному для компиляции этого кода.Даже с флагом -verbose
Maven все еще остается черным ящиком - я не понимаю, какие подпроцессы он может вызывать.С другой стороны, у SBT есть опция для запуска export compile
, и это то, что я сделал.Странно, однако, что когда я запускаю точно такую же команду *1049* scalac
, о которой сообщается в файле экспорта SBT, он все равно создает только пять из восьми файлов классов.
Кто-нибудь здесь знает многоо компиляции Scala?Есть ли какие-то флаги, которые мне нужно передать scalac
, которые я пропускаю?Я могу опубликовать точный scalac
вызов, который я использую, если это будет полезно.