Ответ 1
Фундаментальное различие между двумя командами - это то, что вас отключает. activator
запускает JVM, а затем выполняет команду, указанную в командной строке. Разница между run
и start
- это введение другой JVM. Команда start
запускает вашу программу в новой JVM, а run
- нет. Итак, для ваших четырех случаев:
activator run -Dconfig.file=/myConfig.conf # works
Аргумент -D переходит в активатор JVM, который затем выполняет run
. Это работает, потому что run использует тот же JVM, что и активатор.
activator "run -Dconfig.file=/myConfig.conf" # works
Активатор JVM не получает аргумент -D, но интерпретирует "run -Dconfig.file =/myConfig.conf" и соответственно устанавливает свойство config.file, также в JVM активатора.
activator "start -Dconfig.file=/myConfig.conf" # Works
Активатор запускает новую JVM и передает ей опцию -D, а также запускает вашу программу, поэтому она работает, потому что ваша программа получает свойство config.file.
activator start -Dconfig.file=/myConfig.conf # Doesn't work, config file not found
Активатор JVM получает параметр -D, а затем выполняет команду start
, создавая новую JVM, которая не получает опцию -D, поэтому она терпит неудачу.