Podstawową różnicą między tymi dwoma poleceniami jest to, co się tu dzieje. activator
uruchamia maszynę JVM, a następnie wykonuje polecenie podane w wierszu poleceń. Różnica między run
i start
jest wprowadzeniem kolejnej maszyny JVM. Komenda start
uruchamia twój program w nowym JVM, podczas gdy run
nie. Tak więc, dla czterech przypadkach:
activator run -Dconfig.file=/myConfig.conf # works
-D argumentem będzie JVM aktywatora, który następnie wykonuje run
. Działa, ponieważ uruchomienie używa tej samej maszyny JVM, co aktywator.
activator "run -Dconfig.file=/myConfig.conf" # works
JVM aktywatora dostaje żadnego -D ale interpretuje „run -Dconfig.file =/myConfig.conf” i ustawia właściwość config.file odpowiednio, również w JVM aktywator za.
activator "start -Dconfig.file=/myConfig.conf" # Works
Aktywator rozpoczyna nowy JVM i przekazuje -D opcję na niej, jak również rozpoczęciem programu, tak to działa, ponieważ program robi właściwość config.file.
activator start -Dconfig.file=/myConfig.conf # Doesn't work, config file not found
JVM aktywator za otrzyma opcję -D a następnie wykonuje polecenie start
tworząc nową JVM, który nie otrzyma opcję -D tak to się nie powiedzie.
Czy te polecenia używają różnych katalogów głównych? Biorąc pod uwagę, że jedna z nich rekompiluje wszystko, jeśli kod źródłowy się zmienia, a inny nie. – Ashalynd
Jeśli to była przyczyna, to czy trzecie polecenie również nie może się powieść? –