Предположим, что приложение Java, принимающее целочисленный аргумент командной строки, скажем bubu
.
Предполагая, что используется достойный синтаксический анализатор командной строки (и я делаю - http://pholser.github.com/jopt-simple/), имея в виду ключ -D java, это некоторые из типичных способов передать этот параметр командной строки:
-
--bubu 5
(или--bubu=5
или--bubu5
) -
-Dbubu=5
Где первый аргумент программы и должен обрабатываться приложением с использованием некоторого синтаксического анализатора командной строки, тогда как второй является аргументом VM и уже разбирается с помощью java, делая его доступным как Integer.getInteger("bubu")
Я немного озадачен. Что я должен использовать? Использование средства системного имущества:
- кажется, ничего не стоит
- не зависит от какой-либо библиотеки анализатора командной строки
- предоставляет удобный (хотя и неожиданный) API для получения значений
Насколько я вижу, единственными минусами являются то, что все параметры командной строки должны использовать флаг -D
.
Пожалуйста, совет.
Спасибо.
ИЗМЕНИТЬ
Другие профи для параметров системы - "они пригодны для использования, даже если приложение не является автономным приложением, начиная с основного, но также и когда приложение является webapp или unit test". - спасибо https://stackoverflow.com/users/571407/jb-nizet
EDIT2
Позвольте мне больше сосредоточиться здесь. Есть ли серьезная причина (помимо эстетики) не использовать системные параметры, как всегда?
EDIT3
Хорошо, думаю, теперь я понял. Если мой код, вероятно, будет загружен веб-приложением, тогда возникает проблема потенциального столкновения имен, поскольку другие веб-приложения, размещенные одним и тем же веб-контейнером, совместно используют пространство с системным свойством с моим кодом.
Поэтому я должен быть осмотрительным и неоднозначно использовать свои системные свойства. Таким образом, не более bubu
, теперь com.shunra.myapp.bubu
. Это означает, что вместо простого
-Dbubu=5
У меня
-Dcom.shunra.myapp.bubu=5
который становится менее привлекательным для простого приложения в командной строке.
Другая причина дается Mark Peters, что очень хорошо для меня.