Активатор: Play Framework 2.3.x: запустить и запустить

Почему эти две команды ведут себя по-другому?

Запуск воспроизведения в режиме производства и в режиме запуска dev отличается?

activator run -Dconfig.file=/myConfig.conf # works
activator "run -Dconfig.file=/myConfig.conf" # works

activator "start -Dconfig.file=/myConfig.conf" # Works
activator start -Dconfig.file=/myConfig.conf # Doesn't, config file not found

Ответ 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, поэтому она терпит неудачу.