Подтвердить что ты не робот

Java: использование системных параметров по сравнению с "обычными" параметрами командной строки

Предположим, что приложение 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, что очень хорошо для меня.

4b9b3361

Ответ 1

Я бы утвердил, что преимущество Fortyrunner цитирует на самом деле самое значительное негативное для системных свойств - они доступны для всех, кто просит их.

Если флаг или параметр предназначается для параметра командной строки, он должен быть доступен для уровня или модуля вашего кода, который занимается вводом ввода из командной строки, а не с кодом, который его запрашивает.

Вы можете получить деструктивную связь из глобального состояния, а свойства системы не отличаются от любого другого глобального состояния.

Тем не менее, если вы просто пытаетесь сделать быструю и грязную программу CLI, а разделение проблем и взаимосвязи - это не большая проблема для вас, системные свойства дают вам простой способ, который, однако, приводит к (ИМО) бедным Пользовательский опыт. Некоторая библиотека getopt даст вам больше поддержки для создания хорошего пользовательского интерфейса CLI.

Ответ 2

Одним из основных преимуществ системных свойств является то, что они доступны в любое время в течение вашей программы.

Аргументы командной строки доступны только в основном методе (если вы не сохраняете их).

Ответ 3

Я чувствую, что есть много вещей, которые средний пользователь, как я, не должен знать. Свойства системы помогут разработчику системы предустановить ряд значений, которые позволят запустить систему. Например, когда я загружаю сервер приложений GlassFish, он всегда имеет множество предустановленных параметров, для которых у меня нет идей, для чего они нужны. Я не очень разбираюсь в настройках сервера. Если вы попросите меня запустить сервер GlassFish с 20 параметрами в командной строке, мне нужно будет узнать, для чего эти параметры и сколько я должен установить, и т.д. Это слишком хлопотно.

Вкратце, когда система становится все больше и больше, она может иметь все больше и больше свойств. При заданных настройках системы пользователям может понадобиться только знать, что они есть, когда им действительно нужно. Например, мне нужно знать о GlassFish -XX:PermSize, когда мне нужно увеличить память.