Анализируя исходный код MainGenericRunner
мы видим scala
бегун пытается угадать, что пользователь намеревался
def runTarget(): Option[Throwable] = howToRun match {
case AsObject =>
ObjectRunner.runAndCatch(settings.classpathURLs, thingToRun, command.arguments)
case AsScript if isE =>
ScriptRunner(settings).runScriptText(combinedCode, thingToRun +: command.arguments)
case AsScript =>
ScriptRunner(settings).runScript(thingToRun, command.arguments)
case AsJar =>
JarRunner.runJar(settings, thingToRun, command.arguments)
case Error =>
None
case _ =>
...
}
, где howToRun
потенциально вызывает guessHowToRun
private def guessHowToRun(target: String): GenericRunnerCommand.HowToRun = {
if (!ok) Error
else if (io.Jar.isJarOrZip(target)) AsJar
else if (ScalaClassLoader.classExists(settings.classpathURLs, target)) AsObject
else {
val f = io.File(target)
if (!f.hasExtension("class", "jar", "zip") && f.canRead) AsScript
else {
Console.err.println("No such file or class on classpath: " + target)
Error
}
}
}
Мы можем явно указать флаг -howtorun
:
scala -howtorun:jar some.jar
Scala приложения также можно запускать через java -jar
, например, если мы укажем основной класс в build.sbt
Compile / mainClass := Some("example.MyMain")
и выполним sbt assembly
, то полученная жирная банка под target/
может быть выполнена следующим образом
java -jar myapp-assembly.jar