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