Apache antのjavaタスクのarg要素に空白を含むパスを複数指定するには
antもANTLRも今更感はあるけど、久しぶりにいじると楽しい。
でも、結構はまる。文法ファイル(*.g4) が複数あって、かつパスに空白が含まれる場合(Google Driveとか)に、java タスクの arg 要素で pathref 属性を使おうとすると、ant が空白でパスを切ってしまって java タスクに思い通りに渡らない。そこで、 pathconvert を以下のように使って、文字列化してしまうとうまくいく。
<path id="src.antlr"> <fileset dir="${basedir}/src/antlr"> <include name="**/*.g4" /> </fileset> </path> <target name="antlr_compile"> <echo message="[DEBUG] ${toString:src.antlr}" /> <pathconvert property="antlr.args" refid="src.antlr" pathsep=" "> <regexpmapper from="^(.*)$" to='"\1"' /> </pathconvert> <echo message="[DEBUG] ${antlr.args}" /> <java classname="org.antlr.v4.Tool"> <classpath> <pathelement path="${basedir}/lib/antlr-4.1-complete.jar" /> </classpath> <arg line='-o "${basedir}/src/java/iwsttty/example_antlr"' /> <arg line="-package iwsttty.example_antlr" /> <arg line="${antlr.args}" /> </java> </target>
antlr タスクでは複数の文法ファイル指定はうまくいかなかったです。