EclipseのAPT(annotation processing tool)で突然のエラーで死んだお話
一月くらい前に起きた現象ですが備忘録。
ギョームで使っているFramework、SAStrutsとO/R MapperのDoma。
どちらもannotation processing tool、いわゆるAPTをゴリゴリ利用しています。
アノテーションを付けるとコンパイル時に.apt_generatedあたりにファイルが吐かれてそれを元に色々便利というやつ。
で、プロジェクトが肥大すると.apt_genereatedに吐かれるファイルも相応にして増えていくわけなんですが、ある日突然プロジェクトに忌まわしき赤バツが。
しかもEclipseのデフォルトでは.apt_generatedは隠しフォルダ扱いになっているのでソースコードには問題がなく一体何が起きたのかわからない状態。
とてもつらい
で、ひたすらに調べるとどうやらEclipseのバグっぽい。
パッチもあるっぽいけど、まぁわざわざあててビルドまでしたくない(実際したけど、ようわからんかった)。
で、NightlyBuildで治るのかなーと思ったけどなんか治らないしつらぽよ。
結局Antで
<!-- Source Compile --> <target name="compile"> <javac srcdir="${srcdir}" destdir="${classesdir}" includeAntRuntime="true" encoding="${src.encoding}" fork="yes" compiler="${javaconpiler.ver}" debug="on" debuglevel="source,lines"> <classpath> <fileset dir="${webappdir}/WEB-INF/lib"> <include name="*.jar" /> </fileset> <fileset dir="lib"> <include name="*.jar" /> </fileset> <pathelement path="/usr/local/tomcat/lib/servlet-api.jar" /> </classpath> <compilerarg line="-s .apt_generated" /> <compilerarg line="-A${apt.dao.subpackage.key}=${apt.dao.subpackage.value} -A${apt.dao.suffix.key}=${apt.dao.suffix.value}" /> </javac> </target>
こういう感じのタスク書いて、都度Eclipse上で実行させることに。
幸いにして毎回これをする必要なくて、プロジェクトのCleanとかする度にAntさせれば良さそうなのでそこまで負担じゃない。
こういう謎挙動にハマると一日潰れるのでとても辛いですね。