如何在控制台中使用 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
我有 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