10.5. Inne sposoby uruchamiania programów
Jeśli w pliku źródłowym znajduje się program zawierający jeden obiekt głównego poziomu posiadający zdefiniowaną jedną, nieodziedziczoną metodę main, to taki program może być uruchomiony za pomocą polecenia scala bez potrzeby uprzedniej jawnej kompilacji. Przykład takiego programu znajduje się w pliku Program1.scala.
Plik Program1.scala: object Program1 { def main(args: Array[String]) { println("Hello from Program1") } }
Poniższe polecenie powoduje wykonanie tego programu bez uprzedniej jawnej kompilacji.
$ scala Program1.scala Hello from Program1
Program z pliku Program2.scala nie spełnia opisanych warunków, gdyż nie posiada zdefiniowanej jawnie metody main, a jedynie metodę main dziedziczoną z cechy App.
Plik Program2.scala: object Program2 extends App { println("Hello from Program2") }
Dlatego wykonanie poniższego polecenia nie powoduje uruchomienia kodu zdefiniowanego w obiekcie Program2.
$ scala Program2.scala $
Plik Program3.scala również nie spełnia opisanych warunków, gdyż zawiera dwa obiekty głównego poziomu zawierające metodę main.
Plik Program3.scala: object Program3 { def main(args: Array[String]) { println("Hello from Program3") } } object Program3b { def main(args: Array[String]) { println("Hello from Program3b") } }
Poniższe polecenie nie uruchamia żadnej ze zdefiniowanych w pliku Program3.scala metod main.
$ scala Program3.scala $
Program spełniający opisane wyżej warunki, taki jak program z pliku Program1.scala, może być wykonany za pomocą polecenia scala uruchomionego z dodatkową opcją -save. Takie polecenie powoduje, oprócz wykonania programu, wygenerowanie i zapisanie pliku z rozszerzeniem .jar, zawierającego skompilowany kod programu.
$ scala -save Program1.scala Hello from Program1 $ dir /b Program1.jar Program1.jar
Tak skompilowany i zapakowany w pliku o rozszerzeniu .jar program można następnie wykonać za pomocą polecenia scala, którego argumentem jest nazwa tego pliku, jak w poniższym przykładzie.
$ scala Program1.jar Hello from Program1
Plik Program1.scala:
object Program1 {
def main(args: Array[String]) {
println("Hello from Program1")
}
}
