compc task

なんだかなぁ

つぎのようなマクロを作ってみましたが、「include-classes」がネストできません。

  <macrodef name="compile-macro">
    <attribute name="debug"/>
    <attribute name="ofile"/>
    <attribute name="classes"/>
    <sequential>
      <compc debug="@{debug}" 
	     output="@{ofile}" 
	     as3="true" incremental="true"
	     allow-source-path-overlap="true"
	     include-classes="etc.utils.StringUtil etc.logging.Log">
	<load-config filename="${FLEX_HOME}/frameworks/air-config.xml"/> 
	<source-path path-element="${src.dir}"/> 
      </compc>
    </sequential>
  </macrodef>

つぎの例をベースに色々試しましたけど、訳がわかりませんでした。
駄目な例1:

   <include-classes>
     etc.utils.StringUtil
     etc.logging.Log
   </include-classes>

駄目な例2:

   <include-classes>etc.utils.StringUtil</include-classes>
   <include-classes>etc.logging.Log</include-classes>

対策


flextasksのcompcは使わないで、コマンドラインで命令を組み立てました*1

  <macrodef name="compile-macro">
    <attribute name="debug"/>
    <attribute name="ofile"/>
    <sequential>
      <exec executable="cmd.exe" dir="${dist.dir}">
	<arg value="/c"/>
	<arg value="compc"/>
	<arg line="-load-config ${FLEX_HOME}/frameworks/air-config.xml"/> 
	<arg line="-output @{ofile}"/>
	<arg line="-source-path ${src.dir}"/> 
	<arg value="-debug=@{debug}"/>
	<arg value="-as3=true"/>
	<arg value="-incremental=true"/>
	<arg value="-allow-source-path-overlap=true"/>
	<arg value="-include-classes"/>
	<arg value="etc.logging.Log"/>
	<arg value="etc.utils.StringUtil"/>
      </exec>
    </sequential>
  </macrodef>

バリエーションとして、次のように、elementを使うとかもあり?

  <macrodef name="compile-macro">
    <attribute name="debug"/>
    <attribute name="ofile"/>
    <element name="class-elem"/>
    <sequential>
      <exec executable="cmd.exe" dir="${dist.dir}">
	<arg value="/c"/>
	<arg value="compc"/>
	<arg line="-load-config ${FLEX_HOME}/frameworks/air-config.xml"/> 
	<arg line="-output @{ofile}"/>
	<arg line="-source-path ${src.dir}"/> 
	<arg value="-debug=@{debug}"/>
	<arg value="-as3=true"/>
	<arg value="-incremental=true"/>
	<arg value="-allow-source-path-overlap=true"/>
 	<arg value="-include-classes"/>
        <class-elem/>
      </exec>
    </sequential>
  </macrodef>
  ・・・・・・・・・・・・・・・・・・・・・・・・・・・
  <target name="release" depends="prepare">
    <compile-macro debug="false" ofile="${dist.dir}/etclib.swc">
      <class-elem>
	<arg value="etc.logging.Log"/>
	<arg value="etc.utils.StringUtil"/>
      </class-elem>
    </compile-macro>
  </target>

ちなみに...

compcではなくてacompcを使えば、「load-config」は省略できますね。

  <macrodef name="compile-macro">
    <attribute name="debug"/>
    <attribute name="ofile"/>
    <sequential>
      <exec executable="cmd.exe" dir="${dist.dir}">
	<arg value="/c"/>
	<arg value="acompc"/>
	<arg line="-output @{ofile}"/>
	<arg line="-source-path ${src.dir}"/> 
	<arg value="-debug=@{debug}"/>
	<arg value="-as3=true"/>
	<arg value="-incremental=true"/>
	<arg value="-allow-source-path-overlap=true"/>
	<arg value="-include-classes"/>
	<arg value="etc.logging.Log"/>
	<arg value="etc.utils.StringUtil"/>
      </exec>
    </sequential>
  </macrodef>

*1:「逃げたのね、逃げてしまったのね」「あぁそうさ、逃げたのさ」