Tips and Tricks for Ant on Eclipse. Make JAR file for each subsystem. 2nd Version
前回のバージョンから、ちょくらちょいと修正しました。変更点は
build.properties
説明略。
# do not use eclipse helper GUI app.name=${ant.project.name} java_encoding=MS932 keeptimestamp=false verbose=false src.dir=./src lib.dir=./lib lib4batch.dir=./lib4batch external.dir=./external defaultroot.dir=./defaultroot etc.dir=./build bak.files=**/*~ build.rev=**** makejar.select=**/hoge-addons/* build.dir=./build.ant build.src.dir=${build.dir}/src build.classes.dir=${build.dir}/classes build.jar.dir=${build.dir}/jars target.vm.version=1.6 source.vm.version=1.6 javac.nowarn=off build.debug=on build.debuglevel=lines,vars,source build.memoryMaximumSize=512m imp.vendor.name=HOGE Corporation # Tomcat catalina.home=C:/proactive_devtool/tomcat6.0
build.xml
-
- Java VMのVersion指定してコンパイル
- javac のところで、source、targetを指定してください
- ループ処理
- contrib-XXX.jarをネットで探してきて、ANTのランタイム > クラスパスに追加して下さい
- そうすると、foreachが使えます!
- scriptdefでjavascriptを定義します。サブシステム毎のフォルダ階層から、jar名を切り出します。
- manifestフェイルをちょっと賢く
- tstamp使って、ビルド実行日時をmanifestに追記します
- 日時以外にも色々追記しようと色気出して落とし穴にはまりました。Oracle Application Serverのコンテナ上だと起動できるのに、Tomcatの開発クラスローダを使ってるとClass Not Foundとか・・・
- ↓のタイトル以外を使うとTomcatさんがすねます
- Java VMのVersion指定してコンパイル
Implementation-Title パッケージのタイトル
Implementation-Version バージョン番号
Implementation-Vendor ベンダー企業または組織
Specification-Title 仕様のタイトル
Specification-Version バージョン番号
Specification-Vendor ベンダー企業または組織
以下、できあがりバージョン。これてにANTの自習は終了!
<?xml version="1.0" encoding="Windows-31J"?> <project name="paradise" basedir="." default="all"> <property file="build.properties"/> <tstamp><format property="build.timestamp" pattern="yyyy-MM-dd 'T'HH:mm:ss"/></tstamp> <scriptdef name="substring" language="javascript"> <attribute name="text" /> <attribute name="start" /> <attribute name="end" /> <attribute name="property" /> <![CDATA[ var text = attributes.get("text"); var start = attributes.get("start"); var end = attributes.get("end") || text.length(); project.setProperty(attributes.get("property"), text.substring(start, end)); ]]> </scriptdef> <!-- Include ant-contrib-XXX.jar in Eclipse ANT Runtime classpath --> <taskdef name="foreach" classname="net.sf.antcontrib.logic.ForEach" /> <!-- Execute--> <target name="all" depends="make-jars"/> <!-- Common Util: Set CLASSPATH --> <target name="set-classpath"> <path id="compile.class.path"> <!-- PAE2 JAR (1) --> <path><fileset dir="${lib.dir}"><include name="*.jar"/></fileset></path> <!-- PAE2 JAR (2) --> <path><fileset dir="${lib4batch.dir}"><include name="*.jar"/></fileset></path> <!-- Container JAR --> <path><fileset dir="${catalina.home}/lib"><include name="*.jar"/></fileset></path> </path> </target> <!-- 1. Start Message --> <target name="begin-message" depends="set-classpath"> <echo>BuildName: ${ant.project.name}</echo> <echo>BuildHome: ${basedir}</echo> <echo>BuildJVM: ${ant.java.version}</echo> <echo>BuildFile: ${ant.file}</echo> </target> <!-- 2. Clean --> <target name="clean" depends="begin-message"> <delete dir="${build.dir}"/> <delete><fileset dir="." includes="${bak.files}" defaultexcludes="no"/></delete> <sleep seconds="1"/> </target> <!-- 3. Make directories, copye *.java --> <target name="setup" depends="clean"> <mkdir dir="${build.dir}"/> <mkdir dir="${build.src.dir}"/> <mkdir dir="${build.classes.dir}"/> <mkdir dir="${build.jar.dir}"/> <copy todir="${build.src.dir}" includeemptydirs="true" preservelastmodified="${keeptimestamp}" verbose="${verbose}"> <fileset dir="${external.dir}" includes="**/*.java"/> </copy> </target> <!-- 4. ALL Compile --> <target name="compile" depends="setup"> <javac destdir="${build.classes.dir}" source="${source.vm.version}" target="${target.vm.version}" fork="false" includeantruntime="false"> <src path="${build.src.dir}"/> <classpath> <path refid="compile.class.path"/> </classpath> </javac> </target> <!-- 5. foreach make jar file --> <target name="make-jars" depends="compile"> <foreach param="dir" target="make-jar"> <path> <!-- Only child directories --> <dirset dir="${build.src.dir}"> <include name="${makejar.select}"/> </dirset> </path> </foreach> </target> <!-- Common Util: javac & jar --> <target name="make-jar" depends="set-classpath"> <echo>Directory: ${dir}</echo> <substring text="${dir}" start="42" end="49" property="jarfilename" /> <echo>jarfile name: ${jarfilename}.jar</echo> <javac destdir="${dir}" source="${source.vm.version}" target="${target.vm.version}" nowarn="${javac.nowarn}" debug="${build.debug}" debuglevel="${build.debuglevel}" fork="false" includeantruntime="false"> <src path="${dir}"/> <classpath> <path refid="compile.class.path"/> <pathelement path="${build.classes.dir}"/> </classpath> </javac> <jar jarfile="${build.jar.dir}/${jarfilename}.jar"> <fileset dir="${dir}"> <exclude name="**/*.properties" /> <exclude name="**/*.xml" /> </fileset> <manifest> <attribute name="Implementation-Title" value="${jarfilename}"/> <attribute name="Implementation-Vendor" value="${imp.vendor.name}"/> <attribute name="Implementation-Version" value="${build.timestamp} [${build.rev}]"/> </manifest> </jar> </target> </project>