首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Java:使用系统参数与“常规”命令行选项

Java:使用系统参数与“常规”命令行选项
EN

Stack Overflow用户
提问于 2011-12-28 15:45:30
回答 3查看 3.2K关注 0票数 24

让我们假设一个Java应用程序,它接受一个整数命令行参数,比如bubu

假设一个人使用一个像样的命令行解析器(我做了- https://github.com/jopt-simple/jopt-simple),并记住-D java开关,以下是传递此命令行参数的一些典型方法:

  1. --bubu 5 (或--bubu5)
  2. -Dbubu=5

--bubu=5

其中,第一个参数是程序参数,必须由应用程序使用某个命令行解析器处理,而第二个参数是VM参数,已经被java解析,使其可以作为Integer.getInteger("bubu")使用。

我有点困惑。我应该使用什么?使用系统属性工具:

  • 似乎不需要任何成本
  • 不依赖于任何命令行解析器API方便(尽管不是预期的)API可以获取值

据我所知,唯一的缺点是所有命令行选项都必须使用-D标志。

求求你,我的建议。

谢谢。

编辑

系统参数的另一个优点--“即使应用程序不是从主应用程序开始的独立应用程序,但当应用程序是when应用程序或单元测试时,它们也是可用的。”-感谢https://stackoverflow.com/users/571407/jb-nizet

EDIT2

让我在这里更专注一些。是否有任何严肃的原因(除了美学)不像往常一样使用系统参数?

EDIT3

好了,我想我现在明白了。如果我的代码很可能是由web应用程序加载的,那么就存在潜在的名称冲突问题,因为由相同web容器托管的其他web应用程序与我的代码共享系统属性空间。

因此,我必须谨慎行事,事先消除我的系统属性的歧义。所以,不再有bubu了,现在是com.shunra.myapp.bubu了。这意味着,不是简单的

代码语言:javascript
运行
复制
-Dbubu=5

我有过

代码语言:javascript
运行
复制
-Dcom.shunra.myapp.bubu=5

这对于简单的命令行应用程序来说就不那么有吸引力了。

Mark Peters给出了另一个原因,这对我来说很好。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-12-28 16:10:00

我认为Fortyrunner引用的优势实际上是对系统属性最重要的负面影响--任何需要它们的人都可以使用它们。

如果标志或选项是命令行选项,则它应该可用于处理从命令行获取输入的代码层或模块,而不是请求它的任何代码。

您可以从全局状态获得一些破坏性耦合,并且系统属性与任何其他全局状态没有什么不同。

也就是说,如果你只是想做一个又快又脏的CLI程序,关注点和耦合的分离对你来说并不是一个大问题,系统属性给了你一个简单的方法,但却会导致(IMO)糟糕的用户体验。一些getopt库将为构建良好的CLI用户体验提供更多支持。

票数 14
EN

Stack Overflow用户

发布于 2011-12-28 16:03:49

系统属性的主要优点之一是,它们在程序生命周期内的任何时候都可用。

命令行参数仅在main方法中可用(除非您将它们持久化)。

票数 4
EN

Stack Overflow用户

发布于 2011-12-28 16:25:12

我觉得有很多像我这样的普通用户不需要知道的事情。系统属性将帮助系统开发人员预先设置使系统能够运行的多个值。例如,当我下载GlassFish应用服务器时,它总是带有许多预置参数,我不知道它们是用来做什么的。我在处理服务器的设置方面经验不是很丰富。如果您要求我在命令行中使用20个参数启动GlassFish服务器,我将不得不了解这些参数的用途以及我应该设置多少参数,等等。

简而言之,当系统变得越来越大时,它可能会有越来越多的属性。通过预设系统属性,用户可能只需要在真正需要时知道自己是什么。例如,当我需要增加内存时,我只需要知道GlassFish的-XX:PermSize

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8653224

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档