Java:将命名和未命名参数的组合传递给可执行的Jar / Main方法

我正在寻找一种方法,以便我们可以将命名和未命名的参数传递给main方法。 目前我传递的内容如下

java -jar myJar param1 param2 param3 

并将它们作为

  public static void main( String[] args ) throws IOException { String param1 = args[0]; String param2=args[1]; ..... 

我必须能够发送它们并在Java中处理它们,以便我可以根据它们的名称读取值,并且每次执行Main方法时都不需要以相同的顺序传递参数。 我可以使用一些外部库来使我的工作更轻松。

我想发送我的参数如下,并在java main中处理它

  java -jar myJar param3name=param3 param2name=param2 param1name=param1 param5 param6 

我想把它们当作下面的东西处理

  public static void main( String[] args ) throws IOException { //something like String param3 = getvaluemethod("param3name"); String param1 = getvaluemethod("param1name"); ..... String Param5 =args[n] String param6 = args[n+1] ..... 

我已经看过这个链接 ,并不全面。 关于如何完成任务的任何输入?

我使用Apache Commons CLI来解析java命令行参数。 示例可以在此处找到,可用于执行以下任何选项格式:

  • POSIX之类的选项(即tar -zxvf foo.tar.gz
  • GNU就像长选项(即du --human-readable --max-depth=1
  • 类似Java的属性(即java -Djava.awt.headless=true -Djava.net.useSystemProxies=true Foo
  • 附加值的短选项(即gcc -O2 foo.c
  • 单个连字符的长选项(即ant -projecthelp

基于@Mac70的答案和一些补充,

 private static Map map; private static void makeMap(String[] args) { map = new HashMap<>(); for (String arg : args) { if (arg.contains("=")) { //works only if the key doesn't have any '=' map.put(arg.substring(0, arg.indexOf('=')), arg.substring(arg.indexOf('=') + 1)); } } } public static void main(String[] args) { makeMap(args); //.. String param3 = map.get("param3name"); String param1 = map.get("param1name"); } 

如果您需要任何广泛的内容,您需要查看@Archangel33的答案。

只要参数和名称不包含空格 – 您可以获取所有这些空格,以“=”键拆分并将键/值对添加到HashMap。 稍后您可以使用密钥获得您想要的任何值。

编辑:如果您不想向地图添加一些元素,那么如果这些元素不包含“=”键,则可以忽略它们。