构建Java CLI应用程序方法

构建一个Java CLI(命令行接口)应用程序涉及创建一个可以从命令行运行并接收命令行参数的程序。Java提供了几种不同的方法来实现CLI应用程序,从基本的命令行解析到使用更高的库。下面是创建一个Java CLI应用程序的基本步骤,包括几个不同的方法和技巧:
1. 基本Java CLI应用程序
1.1. 创建基础的Java应用程序

首先,创建一个简单的Java应用程序,它从命令行读取参数并输出结果:

java

public class SimpleCLI {

    public static void main(String[] args) {
        if (args.length == 0) {
            System.out.println("No arguments provided.");
            return;
        }

        System.out.println("Arguments provided:");
        for (String arg : args) {
            System.out.println(arg);
        }
    }
}

1.2. 编译和运行

    编译代码:

    bash

javac SimpleCLI.java

运行程序,传递一些命令行参数:

bash

java SimpleCLI arg1 arg2 arg3

输出将是:

yaml

    Arguments provided:
    arg1
    arg2
    arg3

2. 使用 Apache Commons CLI

Apache Commons CLI 是一个流行的库,用于简化命令行参数的解析。以下是如何使用它的示例:
2.1. 添加依赖

如果使用 Maven,将以下依赖添加到 pom.xml 中:

xml


    commons-cli
    commons-cli
    1.4

2.2. 创建CLI应用程序

java

import org.apache.commons.cli.*;

public class ApacheCLI {

    public static void main(String[] args) {
        Options options = new Options();

        Option input = new Option("i", "input", true, "input file path");
        input.setRequired(true);
        options.addOption(input);

        Option verbose = new Option("v", "verbose", false, "verbose output");
        options.addOption(verbose);

        CommandLineParser parser = new DefaultParser();
        HelpFormatter formatter = new HelpFormatter();
        CommandLine cmd;

        try {
            cmd = parser.parse(options, args);
        } catch (ParseException e) {
            System.out.println(e.getMessage());
            formatter.printHelp("ApacheCLI", options);
            System.exit(1);
            return;
        }

        String inputFile = cmd.getOptionValue("input");
        boolean isVerbose = cmd.hasOption("verbose");

        System.out.println("Input file: " + inputFile);
        if (isVerbose) {
            System.out.println("Verbose mode is enabled.");
        }
    }
}

2.3. 编译和运行

    编译代码(确保commons-cli库在类路径中):

    bash

javac -cp ".:path/to/commons-cli-1.4.jar" ApacheCLI.java

运行程序:

bash

    java -cp ".:path/to/commons-cli-1.4.jar" ApacheCLI -i input.txt -v

3. 使用 JCommander

JCommander 是另一个用于解析命令行参数的库。
3.1. 添加依赖

如果使用 Maven,将以下依赖添加到 pom.xml 中:

xml


    com.beust
    jcommander
    1.81

3.2. 创建CLI应用程序

java

import com.beust.jcommander.JCommander;
import com.beust.jcommander.Parameter;
import com.beust.jcommander.ParameterException;

public class JCommanderCLI {

    @Parameter(names = "-input", description = "Input file path", required = true)
    private String inputFile;

    @Parameter(names = "-verbose", description = "Verbose mode")
    private boolean verbose;

    public static void main(String[] args) {
        JCommanderCLI cli = new JCommanderCLI();
        JCommander commander = JCommander.newBuilder()
                .addObject(cli)
                .build();

        try {
            commander.parse(args);
        } catch (ParameterException e) {
            System.out.println(e.getMessage());
            commander.usage();
            System.exit(1);
        }

        System.out.println("Input file: " + cli.inputFile);
        if (cli.verbose) {
            System.out.println("Verbose mode is enabled.");
        }
    }
}

3.3. 编译和运行

    编译代码(确保jcommander库在类路径中):

    bash

javac -cp ".:path/to/jcommander-1.81.jar" JCommanderCLI.java

运行程序:

bash

    java -cp ".:path/to/jcommander-1.81.jar" JCommanderCLI -input input.txt -verbose

4. 处理更复杂的CLI需求

    参数验证: 对输入参数进行验证,以确保它们符合预期的格式或范围。
    生成帮助文档: 为用户提供帮助文档和使用指南。
    多命令支持: 实现支持多个命令的应用程序,每个命令都有不同的参数和功能。

5. 打包和分发

你可以使用工具如 Maven 或 Gradle 打包你的应用程序为 JAR 文件,并使用 java -jar 命令运行。例如,使用 Maven 打包:

bash

mvn package

然后运行 JAR 文件:

bash

java -jar target/your-app.jar -input input.txt -verbose

总结

构建一个 Java CLI 应用程序可以从简单的 args 处理开始,也可以通过使用像 Apache Commons CLI 和 JCommander 这样的库来增强功能。这些工具提供了更强大和灵活的命令行参数解析能力,使你的应用程序更加健壮和用户友好。


请使用浏览器的分享功能分享到微信等