Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/321.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-cloud-platform/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
获取Java运行时参数——argumentName=argumentValue_Java_Arguments_Command Line Arguments - Fatal编程技术网

获取Java运行时参数——argumentName=argumentValue

获取Java运行时参数——argumentName=argumentValue,java,arguments,command-line-arguments,Java,Arguments,Command Line Arguments,我需要运行一个程序,其中运行时参数以 --argumentName=argumentVaue 我需要在我的主函数中得到这些值,如下所示 public class TestArguments { public static void main(String[] args) { System.out.println(System.getProperty("argumentA")); System.out.println(System.getProperty("argumen

我需要运行一个程序,其中运行时参数以

--argumentName=argumentVaue
我需要在我的主函数中得到这些值,如下所示

public class TestArguments {

  public static void main(String[] args) {

    System.out.println(System.getProperty("argumentA"));
    System.out.println(System.getProperty("argumentB"));
    System.out.println(System.getProperty("argumentC"));
    System.out.println(System.getProperty("argumentD"));

    for(int i=0; i<args.length; i++) {
        System.out.println("Argument " + i + " equals " + args[i]);
    }

  }

}
公共类测试论证{
公共静态void main(字符串[]args){
System.out.println(System.getProperty(“argumentA”);
System.out.println(System.getProperty(“argumentB”);
System.out.println(System.getProperty(“argumentC”);
System.out.println(System.getProperty(“argumentD”);

对于(int i=0;i实际上,在类启动后传递程序参数时传递程序参数:

"java -cp myProgram.jar" com.foo.bar.TestArguments --argumentA=a --argumentB=b --argumentC=c--argumentD=d.
System.getProperty(String)
方法允许检索系统属性,这是另一回事。这就是为什么不使用此方法检索程序参数的原因

System
属性是系统(操作系统)的属性。
您可以通过将它们作为JVM参数(而不是程序参数)传递来传递/创建其他参数,并在程序中更轻松地检索它们:

java -DargumentA=a -DargumentB=b -DargumentC=c -DargumentD=d -cp 
    "myProgram.jar" com.foo.bar.TestArguments 
但是,通过系统属性绕过以便于检索特定于程序的参数是相当误导的

因此,保留您的程序参数,而不是拆分
字符串
参数,而是使用API来完成此操作。
实现它是非常好的

这将非常简单:

import org.kohsuke.args4j.CmdLineException;
import org.kohsuke.args4j.CmdLineParser;
import org.kohsuke.args4j.Option;
import org.kohsuke.args4j.OptionHandlerFilter;

public class TestArguments {

    @Option(name = "--argumentA", usage = "...")
    private String argumentA;

    @Option(name = "--argumentB", usage = "...")
    private String argumentB;

    @Option(name = "--argumentC", usage = "...")
    private String argumentC;

    @Option(name = "--argumentD", usage = "...")
    private String argumentD;

    public static void main(String[] args) throws IOException {
       new TestArguments().doMain(args);
       // run the logic of the program
    }

    public void doMain(String[] args) throws IOException {
      CmdLineParser parser = new CmdLineParser(this);

      try {
        // parse the arguments.
        parser.parseArgument(args);        
       } catch (CmdLineException e) {
         System.err.println(e.getMessage());
         parser.printUsage(System.err);
         return;
       }     
    }
}
您还可以使用它来解析命令行,这是一个非常好的库

您可以在Maven或Gradle项目中使用它

在Gradle项目中,您需要将其插入到依赖项中:

compile group: 'commons-cli', name: 'commons-cli', version: '1.4'
以下是如何在Apache Commons CLI中实现此参数(
--argumentName=argumentValue
)的示例:

import org.apache.commons.cli.*;

public class CLITestMain {

    public static void main(String[] args) throws ParseException {
        // create Options object
        Options options = new Options();

        // add a option
        options.addOption("a", "argumentName", true, "Do something");
        CommandLineParser parser = new DefaultParser();
        CommandLine cmd = parser.parse( options, args);

        if(cmd.hasOption("a")) {
            System.out.println("You nailed it!");
            System.out.println(cmd.getOptionValue("a"));
        }
        else {
            HelpFormatter formatter = new HelpFormatter();
            formatter.printHelp( "CLITestMain", options );
        }
    }
}
此示例支持参数的短格式和开箱即用的长格式

长格式:

java CLITestMain --argumentName=hi
简表:

java CLITestMain -a=hi

您可以使用设计用于此目的的API:。您的答案也很好,很抱歉,我只能接受一个答案,我使用了Apache Commons CLI。不过注释很好。谢谢。@Tea先生,不客气。别担心,这不是问题:)正如答案的评论中所说,我个人认为Apache Commons CLI(我在新应用程序中使用和未使用)不如Args4J实用。我个人发现Apache Commons CLI(我在新应用程序中使用和未使用)不如
Args4J
那么实用。API真的很麻烦。@Mr.Tea如果用户没有正确输入参数,您实际上可以使用
HelpFormatter
自动生成帮助消息。请参见上面的示例。@gil.fernandes HelpFormatter很好用,只是添加了它,谢谢。