2007年9月6日 星期四

Eclipse & Ant

Eclipse是一套相當受歡迎的IDE,他的refactoring跟code completion做的相當不錯,而且也有許多不錯用的plugin,重點還是免費的(不過老實說,他其他的很多功能並不好用,而且3.2版之後似乎越來越肥大)。Ant是許多Java developer常用的工具,在Netbeans跟Eclipse都有支援。事實上,透過Ant,可以來協助解決很多Eclipse本身沒做好的事。但是,問題在於Ant所需要的build.xml並不容易撰寫,常常可能會發生為了作一件小事,結果花費很多時間去撰寫build.xml。所幸,Eclipse本身有支援將project export出build.xml的功能,透過此功能就可以將使用中的project的相關的設定(像是lib設定等等)一併產生。因此,我們只需要在匯出的build.xml上再加上我們所需要的target去執行我們要的task即可。
以下列出幾個在開發Java project常用的target的語法:
  1. 產生jar:
    <target name="build-jar" depends="build-project">
    <jar destfile="your_jar.jar" basedir="${basedir}/build/classes" compress="true"></jar>
    </target>
  2. 產生javadoc:
    <target name="build-docs" depends="build-project" description="--> build-docs">
    <javadoc author="true" source="1.5" classpathref="Your_project.classpath" sourcepath="${basedir}/src" destdir="${basedir}/doc" charset="UTF-8" version="true" packagenames="*">
    <link href="http://java.sun.com/j2se/1.5.0/docs/api/"/>
    </javadoc>
    </target>
    其中,classpathref可以填入由eclipse幫忙產生的路徑變數,通常是以你的proejct_name.classpath命名。
  3. 產生war:war的建立比前兩個稍微複雜,原因在於third-party lib的import,ant的war task並沒有辦法以<path>來讀取project有用到的lib路徑。所以我們必須自行把這些lib先複製到某個資料夾之後,在用war task去建立war檔,建立完畢之後再刪除。
    <target name="build-war" depends="build-project" description="--> description">
    <copy todir="${basedir}/WebContent/WEB-INF/lib" flatten="true">
    <path refid="Apache Commons Logging-1.1.0.userclasspath"/>
    <path refid="Apache Log4J-1.2.13.userclasspath"/>
    <path refid="Wicket-1.2.6.userclasspath"/>
    </copy>
    <war destfile="wicket.war" webxml="${basedir}/WebContent/WEB-INF/web.xml">
    <lib dir="${basedir}/WebContent/WEB-INF/lib">
    <classes dir="${basedir}/build/classes">
    </war>
    <delete>
    <fileset dir="${basedir}/WebContent/WEB-INF/lib" includes="**/*">
    </delete>
    </target>
透過以上的語法,可以有效簡化jar, javadoc, war的產生。
P.S: 以上語法內的task與attribute的用法與意義,請查閱Ant的說明文件

沒有留言: