arg要素のvalue属性とline属性の違い

Antのjavaタスクやexecタスクは、arg要素を指定することができる。
このarg要素では、value属性とline属性のどちらでも引数を指定できるけど、
ちょっとした違いがあってややこしい。というか、どっち使えばいいかわからん。
というわけで、さくっと確認してみる。




一応、マニュアルではこのようになっている。
value:1つの引数を指定する。スペースを含むことができる。
・line:スペースで区切って複数の引数を指定する。


これらをちょっと確認してみる。
まずは、Antから実行させるJavaのクラス。
ただ単に、引数を表示するだけ。
# パッケージ名はてきとー。


package jp.ykhr.kokko.antarg;
public class Main {
public static void main(String[] args) {
for (int i = 0; i < args.length; i++) {
System.out.println(i + ": " + args[i]);
}
}
}


そしてAntのビルドファイル。
どちらのjavaタスクとも、引数として「C:/Program Files」と
「C:/Documents and Settings」の2つを指定している(つもり)。
1つ目はvalue属性、2つ目はline属性で指定している。














これを実行すると・・・


[echo] ***** value *****
[java] 0: C:/Program Files C:/Documents and Settings
[echo] ***** line *****
[java] 0: C:/Program
[java] 1: Files
[java] 2: C:/Documents
[java] 3: and
[java] 4: Settings
というわけで、大間違いな指定に・・・
valueは、単一として認識されるし、lineはスペースで区切られてる。
まー、マニュアル通りなわけで。


こんなときは、value属性を使ってarg要素を複数指定するか
line属性でシングルクォーテーションで囲むみたい。















lineの場合、指定するものがプロパティの場合も同じ。















これの実行結果。


[echo] ***** 1 *****
[java] 0: C:/Program
[java] 1: Files
[java] 2: C:/Documents
[java] 3: and
[java] 4: Settings
[echo] ***** 2 *****
[java] 0: C:/Program Files
[java] 1: C:/Documents and Settings
ってなわけで。
ちなみに、lineの場合はシングルクォーテーションの数が合わないと怒られる。
なので、プロパティにシングルクォーテーションが含まれると動かなかったりする。


んじゃーlineを使ってシングルクォーテーションを指定したい場合は、どうすんだ??
って疑問がわくわけで。
# 私の力では、できませんでした・・・。
valueを使えってことなんですかね。




マニュアルでは、valueを推奨するぜ!(って書いてあるように読める)
となっているので、value属性を使う方がいいのかも。
実はもう手遅れなんだけど。