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

如何在控制台中使用commons cli运行java应用程序,java,apache-commons,Java,Apache Commons,我有一个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 Str

我有一个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$1.run(Unknown Source)
        at java.net.URLClassLoader$1.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

java.lang.ClassNotFoundException:org.apache.commons.cli.ParseException
意味着,尽管您正在类中导入
org.apache.commons.cli.
,但它不会包含在您创建的jar中。java jar不是DLL,如果您看到此类错误,请继续在预期的jar中查找该类。您可以在7zip或winzip中打开它。你会在那里找到这么多有趣的信息。@Andreas我怎样才能在jar文件中找到org.apache.commons.cli.*你的NewMyZip-1.jar是否包含commons cli?如何才能看到我的jar包含commons cli?只需解压缩jar并检查包含哪些其他库。