मैंने दस्तावेज़ों को देखा है लेकिन यह नहीं देख सकता कि अपाचे कॉमन्स सीएलआई को डबल-हाइफ़न "विकल्प" को संभालने के लिए कैसे सामान्य रूप से विकल्प प्रसंस्करण को समाप्त किया जाता है। ,डबल-डैश को संभालने के लिए अपाचे सीएलआई कैसे प्राप्त करें?
MyProgram -opt -- param1 param2
मैं विकल्प इस मामले में कोई तर्क के साथ खत्म करना चाहते हैं:
निम्नलिखित कमांड लाइन जो एक "-opt" विकल्प जो एक वैकल्पिक तर्क यह है कि निर्दिष्ट नहीं है ले सकते हैं पर विचार करें लेकिन अपाचे एक तर्क के रूप में "-" देता है। यदि विकल्प एक से अधिक तर्क के लिए अनुमति है, तो कुछ या सभी पैरामीटर तर्क के रूप में वापस आ जाएंगे।
package com.lifetouch.commons.cli;
import java.util.Arrays;
import org.apache.commons.cli.*;
public class DoubleHyphen {
private static Options options = new Options();
public static void main(String args[]) {
// One required option with an optional argument:
@SuppressWarnings("static-access")
OptionBuilder builder = OptionBuilder.isRequired(true).
withDescription("one optional arg").
withArgName("optArg").hasOptionalArgs(1);
options.addOption(builder.create("opt"));
// Illustrate the issue:
doCliTest(new String[] { "-opt"});
doCliTest(new String[] { "-opt", "optArg", "param"});
doCliTest(new String[] { "-opt", "--", "param"});
// What I want is for the double-dash to terminate option processing.
// Note that if "opt" used hasOptionalArgs(2) then "param" would be a second
// argument to that option (rather than an application parameter).
}
private static void doCliTest(String[] args) {
System.out.println("\nTEST CASE -- command line items: " + Arrays.toString(args));
// Parse the command line:
CommandLine cmdline = null;
try {
CommandLineParser parser = new GnuParser();
cmdline = parser.parse(options, args); // using stopAtNonOption does not help
} catch (ParseException ex) {
System.err.println("Command line parse error: " + ex);
return;
}
// Observe the results for the option and argument:
String optArgs[] = cmdline.getOptionValues("opt");
if (null == optArgs) {
System.out.println("No args specified for opt");
} else {
System.out.println(optArgs.length + " arg(s) for -opt option: " +
Arrays.toString(optArgs));
}
// Observe the results for the command-line parameters:
String tmp = Arrays.toString(cmdline.getArgList().toArray());
System.out.println(cmdline.getArgList().size() +
" command-line parameter(s): " + tmp);
}
}
आप नवीनतम अपाचे कॉमन्स CLI ** 1.2 ** संस्करण का उपयोग कर रहे हैं? –
हां, मैं 1.2 – MykennaC
का उपयोग कर रहा हूं, फिर नीचे 'PosixParser' काम करना चाहिए। [PosixParser.java] देखें (http://javasourcecode.org/html/open-source/commons-cli/commons-cli-1.2/org/apache/commons/cli/PosixParser.java.html) स्रोत कोड: यह सौदा करता है '--' के साथ (देखें 'निजी शून्य प्रक्रिया नॉनऑप्शन टोकन (स्ट्रिंग वैल्यू, बूलियन स्टॉपएटोनऑप्शन)' लाइन 182 पर)। –