如何在控制台中使用 commons cli 运行 java 应用程序

How to run java application with commons cli in console

我有 Maven 项目,我正在尝试使用 commons cli 库来处理输入数据:

import org.apache.commons.cli.*;
import java.util.logging.Level;
import java.util.logging.Logger;

public class Cli {
    private static final Logger log = Logger.getLogger(Cli.class.getName());
    private String[] args = null;
    private Options options = new Options();

    public Cli(String[] args) {

        this.args = args;

        options.addOption("h", "help", false, "show help.");
        options.addOption("i", "inputs", true, "Enter the input file name.");
        options.addOption("o", "output", true, "Enter the output file name.");
    }

    public String[] parse() {
        CommandLineParser parser = new BasicParser();
        String[] returnArguments = new String[2];
        CommandLine cmd = null;
        try {
            cmd = parser.parse(options, args);

            if (cmd.hasOption("h"))
                help();

            if (cmd.hasOption("i")) {
                log.log(Level.INFO, "The initial file will be " + cmd.getOptionValue("i"));
                returnArguments[0] = cmd.getOptionValue("i");
            } else {
                log.log(Level.SEVERE, "Missing input file name option");
                help();
            }

            if (cmd.hasOption("o")) {
                log.log(Level.INFO, "The output file will be " + cmd.getOptionValue("o"));
                returnArguments[1] = cmd.getOptionValue("o");
            } else {
                log.log(Level.SEVERE, "Missing output file name option");
                help();
            }
        } catch (ParseException e) {
            log.log(Level.SEVERE, "Failed to parse command line properties", e);
            help();
        }
        return returnArguments;
    }

    private void help() {
        HelpFormatter formatter = new HelpFormatter();
        formatter.printHelp("Main", options);
        System.exit(0);
    }
}

我在 Intellij Idea 中设置参数:-i inputs.zip -o output.zip 它有效,但我应该在控制台中使用什么命令?

我试过:java -jar NewMyZip-1.jar -i inputs.zip -o output.zip 并得到例外:

Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/commons/cl
i/ParseException
        at main.MyZip.main(MyZip.java:12)
Caused by: java.lang.ClassNotFoundException: org.apache.commons.cli.ParseExcepti
on
        at java.net.URLClassLoader.run(Unknown Source)
        at java.net.URLClassLoader.run(Unknown Source)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(Unknown Source)
        at java.lang.ClassLoader.loadClass(Unknown Source)
        at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
        at java.lang.ClassLoader.loadClass(Unknown Source)
        ... 1 more

有人知道问题是什么以及如何解决吗?

您的 NewMyZip-1.jar 是否包含 commons-cli ?否则请确保在类路径中包含 commons-cli jar:

java -cp PATH_TO_JAR/commons-cli.jar -jar NewMyZip-1.jar -i inputs.zip -o output.zip