I think we should standardize the OpenSymphony build process. Here is my first cut at it, please comment:
- attached is a build script for OSCore, but as you can see, it's very generic. We should use this as a base and not add much more to it, mostly instructions on how to package files like ejb-jar.xml in to the jar itself. -the directory structure of CVS would look like: project/ project/docs project/lib project/lib/build project/lib/build/jalopy project/lib/core project/lib/optional project/src/etc project/src/java project/src/test project/src/example [if needed] There would be build.bat and build.sh scripts to build the project, meaning CVS is self-contained (no ant install needed). So that means that ant and all the optional tasks would be in lib/build. - distribution structure: project.zip/ project.zip/project.jar project.zip/docs/ project.zip/docs/api project.zip/docs/clover project.zip/docs/junit project.zip/docs/lib project.zip/docs/src - if you see in the script, there would be three extra tasks built in to the build script: * jalopy (code formatting) * junit (unit tests) * clover (test coverage reports) - Documentation is assumed to be HTML right now, but pending Ken's final thoughts, this would change. Also, the junit and clover reports could be run through XSLs as well.
<project default="jar" basedir="."> <path id="cp"> <fileset dir="lib"> <include name="**/*.jar" /> </fileset> </path> <path id="clover.classpath"> <pathelement path="lib/build/clover.jar"/> <pathelement path="lib/build/velocity.jar"/> </path> <taskdef name="jalopy" classname="de.hunsicker.jalopy.plugin.ant.AntPlugin"/> <taskdef name="junit" classname="org.apache.tools.ant.taskdefs.optional.junit.JUnitTask"/> <target name="init"> <property file="build.properties"/> <property name="lib" value="lib"/> <property name="lib.core" value="${lib}/core"/> <property name="lib.build" value="${lib}/build"/> <property name="lib.optional" value="${lib}/optional"/> <property name="src" value="src"/> <property name="src.java" value="${src}/java"/> <property name="src.test" value="${src}/test"/> <property name="src.etc" value="${src}/etc"/> <property name="build" value="build"/> <property name="build.test" value="${build}/test"/> <property name="build.java" value="${build}/java"/> <property name="dist" value="dist"/> <property name="docs" value="docs"/> <property name="clover.initstring" location="testcoverage.db"/> <property name="packages" value="com.opensymphony.*" /> </target> <target name="clean" depends="init"> <delete dir="${tmp}" /> <delete dir="${build}" /> <delete dir="${dist}" /> <delete> <fileset dir="." includes="testcoverage.db*"/> </delete> </target> <target name="java" depends="init"> <mkdir dir="${build.java}"/> <javac srcdir="${src.java}" destdir="${build.java}" classpathref="cp" debug="on"/> </target> <target name="test" depends="init"> <mkdir dir="${build.test}"/> <javac srcdir="${src.java}" destdir="${build.test}" classpathref="cp" debug="on" compiler="org.apache.tools.ant.taskdefs.CloverCompilerAdapter"/> <javac srcdir="${src.test}" destdir="${build.test}" classpathref="cp" debug="on"/> <mkdir dir="${dist}/docs/junit"/> <junit printsummary="yes" haltonfailure="yes" haltonerror="yes" fork="yes"> <classpath> <pathelement location="${build.test}"/> <path refid="cp"/> </classpath> <formatter type="xml"/> <batchtest todir="${dist}/docs/junit"> <fileset dir="${src.test}"> <include name="**/*Test.java"/> </fileset> </batchtest> </junit> </target> <target name="format" depends="java"> <jalopy fileformat="unix" convention="src/etc/jalopy.xml" history="file" historymethod="adler32" loglevel="info" threads="2" classpathref="cp"> <fileset dir="${src.java}"> <include name="**/*.java" /> </fileset> <fileset dir="${src.test}"> <include name="**/*.java" /> </fileset> </jalopy> </target> <target name="jar" depends="format"> <mkdir dir="${dist}"/> <jar basedir="${build.java}" jarfile="${dist}/${name}-${version}.jar" /> </target> <target name="javadocs" depends="init"> <mkdir dir="${dist}/docs/api" /> <javadoc sourcepath="${src.java}" destdir="${docs}/api" packagenames="${packages}" classpathref="cp" author="true" version="true" windowTitle="${name} ${version} API" doctitle="${name}" footer="See <a href="http://www.opensymphony.com">www.opensymphony.com</a> for more information." use="true" verbose="false" /> <copy overwrite="yes" file="${docs}/main.css" tofile="${docs}/api/stylesheet.css"/> </target> <target name="clover.report" depends="test"> <java classname="com.cortexeb.tools.clover.reporters.html.HtmlReporter" fork="true"> <arg line="--outputdir ${dist}/docs/clover --showSrc --initstring ${clover.initstring} --title '${name}'"/> <classpath refid="cp"/> </java> </target> <target name="junit.report" depends="test"> <junitreport todir="${dist}/docs/junit"> <fileset dir="${dist}/docs/junit"> <include name="TEST-*.xml"/> </fileset> <report format="frames" todir="${dist}/docs/junit"/> </junitreport> </target> <target name="docs" depends="javadocs, clover.report, junit.report"> <copy todir="${dist}/docs"> <fileset dir="${docs}"/> </copy> </target> <target name="dist" depends="jar, docs"> <mkdir dir="${dist}/zip"/> <mkdir dir="${dist}/zip/docs"/> <mkdir dir="${dist}/zip/src"/> <mkdir dir="${dist}/zip/lib"/> <copy todir="${dist}/zip/docs"> <fileset dir="${dist}/docs"/> </copy> <copy todir="${dist}/zip/src"> <fileset dir="src"/> </copy> <copy todir="${dist}/zip/lib"> <fileset dir="${lib.core}"/> </copy> <copy file="${dist}/${name}-${version}.jar" todir="${dist}/zip"/> <zip zipfile="${dist}/${name}-${version}.zip" basedir="${dist}/zip"/> <delete dir="${dist}/zip"/> </target> </project>