antのコンパイル

jarとかwarとか作るときに余計なclassファイルが入ってるなーと思って、気づいたこと。

<target name="compile" depends="prepare">
    <javac destdir="${dir.classes}" srcdir="${dir.src}" >
        <src path="src/jp/co/xxx" />
        <include name="business/**/*.java" />
        <exclude name="common/**/*.java" if="exclude.common" />
        <classpath refid="lib.jar" />
    </javac>
</target>


とすると「src/jp/co/xxx/*/business/*」配下かつ「src/jp/co/xxx/*/common/*」配下以外のjavaだけコンパイルされる気がしてたけど、「src/jp/co/xxx/*/business/*」配下のjavaが必要としているクラスが「src/jp/co/xxx/*/common/*」配下に存在すれば、そのクラスもコンパイルされる。


じゃなきゃ結構コンパイルエラーが頻発しちゃうか。


ということで、jarに含めたくないclassファイルは、コンパイル時じゃなくてjar作成時に「exclude」で除外してあげないといけないんだね。


てか、普通、業務jarと共通jarを分けて作るならプロジェクト分けるから、こんなパッケージ構成おかしいんだけど、まー、現実の仕事となるとこういうのを引き継いじゃったりして困ったりもするもんだと。