回答編集履歴

1

ソースコードと実行結果を追記

2016/11/25 08:08

投稿

KiyoshiMotoki
KiyoshiMotoki

スコア4791

test CHANGED
@@ -7,3 +7,165 @@
7
7
  で、私の手元の環境(*)では、使用するオプションハンドラーを その回答で提示されているクラスに切り替えると、うまく動作しました。
8
8
 
9
9
  * Mac OSX 10.9, JDK1.7
10
+
11
+
12
+
13
+ Main.java
14
+
15
+ ```java
16
+
17
+ import org.kohsuke.args4j.CmdLineException;
18
+
19
+ import org.kohsuke.args4j.CmdLineParser;
20
+
21
+
22
+
23
+ public class Main {
24
+
25
+ public static void main(String[] args) {
26
+
27
+ Shell shell = new Shell();
28
+
29
+
30
+
31
+ CmdLineParser parser = new CmdLineParser(shell);
32
+
33
+ try {
34
+
35
+ parser.parseArgument(args);
36
+
37
+ } catch (CmdLineException e) {
38
+
39
+ e.printStackTrace();
40
+
41
+ return;
42
+
43
+ }
44
+
45
+
46
+
47
+ for (String s : shell.vcm) {
48
+
49
+ System.out.println(s);
50
+
51
+ }
52
+
53
+
54
+
55
+ }
56
+
57
+
58
+
59
+ }
60
+
61
+ ```
62
+
63
+ Shell.java
64
+
65
+ ```java
66
+
67
+ import org.kohsuke.args4j.Option;
68
+
69
+
70
+
71
+ public class Shell {
72
+
73
+
74
+
75
+ @Option(name = "-v", metaVar = "x", handler = WellBehavedStringArrayOptionHandler.class)
76
+
77
+ static String[] vcm;
78
+
79
+
80
+
81
+ }
82
+
83
+ ```
84
+
85
+ WellBehavedStringArrayOptionHandler.java
86
+
87
+ ```java
88
+
89
+ import org.kohsuke.args4j.CmdLineException;
90
+
91
+ import org.kohsuke.args4j.CmdLineParser;
92
+
93
+ import org.kohsuke.args4j.OptionDef;
94
+
95
+ import org.kohsuke.args4j.spi.Messages;
96
+
97
+ import org.kohsuke.args4j.spi.OptionHandler;
98
+
99
+ import org.kohsuke.args4j.spi.Parameters;
100
+
101
+ import org.kohsuke.args4j.spi.Setter;
102
+
103
+
104
+
105
+ public class WellBehavedStringArrayOptionHandler extends OptionHandler<String> {
106
+
107
+ public WellBehavedStringArrayOptionHandler(CmdLineParser parser, OptionDef option,
108
+
109
+ Setter<String> setter) {
110
+
111
+ super(parser, option, setter);
112
+
113
+ }
114
+
115
+
116
+
117
+ @Override
118
+
119
+ public String getDefaultMetaVariable() {
120
+
121
+ return Messages.DEFAULT_META_STRING_ARRAY_OPTION_HANDLER.format();
122
+
123
+ }
124
+
125
+
126
+
127
+ @Override
128
+
129
+ public int parseArguments(Parameters params) throws CmdLineException {
130
+
131
+ int counter;
132
+
133
+ for (counter = 0; counter < params.size(); counter++) {
134
+
135
+ String param = params.getParameter(counter);
136
+
137
+ if (param.startsWith("-")) {
138
+
139
+ break;
140
+
141
+ }
142
+
143
+ setter.addValue(param);
144
+
145
+ }
146
+
147
+ return counter;
148
+
149
+ }
150
+
151
+ }
152
+
153
+ ```
154
+
155
+ 実行時引数
156
+
157
+ ```
158
+
159
+ -v "2 1" 1
160
+
161
+ ```
162
+
163
+ 実行結果
164
+
165
+ ```
166
+
167
+ 2 1
168
+
169
+ 1
170
+
171
+ ```