<cruisecontrol> <!-- xxx--> <project name="xxx"> <listeners> <currentbuildstatuslistener file="logs/${project.name}/status.txt" /> </listeners> <bootstrappers> <svnbootstrapper localWorkingCopy="projects/${project.name}" /> </bootstrappers> <modificationset quietperiod="60"> <svn localWorkingCopy="projects/${project.name}" /> </modificationset> <schedule interval="300"> <maven2 mvnhome="/usr/share/maven2" pomfile="projects/${project.name}/pom.xml" goal="clean package sonar:sonar" /> </schedule> <log> <merge dir="projects/${project.name}/target"/> <merge dir="projects/${project.name}/target/site"/> <merge dir="projects/${project.name}/target/test-results"/> <merge file="projects/${project.name}/target/checkstyle-result.xml"/> <merge file="projects/${project.name}/target/pmd.xml"/> <merge file="projects/${project.name}/target/findbugsXml.xml"/> <merge file="projects/${project.name}/target/jdepend-report.xml"/> <merge file="projects/${project.name}/target/javancss-raw-report.xml"/> </log> <publishers> <onsuccess> <artifactspublisher dir="projects/${project.name}/target" dest="artifacts/${project.name}" /> </onsuccess> </publishers> </project> <!-- xxx--> <project name="xxx"> <listeners> <currentbuildstatuslistener file="logs/${project.name}/status.txt" /> </listeners> <bootstrappers> <svnbootstrapper localWorkingCopy="projects/${project.name}" /> </bootstrappers> <modificationset quietperiod="60"> <svn localWorkingCopy="projects/${project.name}" /> </modificationset> <schedule interval="300"> <maven2 mvnhome="/usr/share/maven2" pomfile="projects/${project.name}/pom.xml" goal="clean package sonar:sonar" /> </schedule> <log> <merge dir="projects/${project.name}/target"/> <merge dir="projects/${project.name}/target/site"/> <merge dir="projects/${project.name}/target/test-results"/> <merge file="projects/${project.name}/target/checkstyle-result.xml"/> <merge file="projects/${project.name}/target/pmd.xml"/> <merge file="projects/${project.name}/target/findbugsXml.xml"/> <merge file="projects/${project.name}/target/jdepend-report.xml"/> <merge file="projects/${project.name}/target/javancss-raw-report.xml"/> </log> <publishers> <onsuccess> <artifactspublisher dir="projects/${project.name}/target" dest="artifacts/${project.name}" /> </onsuccess> </publishers> </project> <!--xxx--> <project name="xxx"> <listeners> <currentbuildstatuslistener file="logs/${project.name}/status.txt" /> </listeners> <bootstrappers> <svnbootstrapper localWorkingCopy="projects/${project.name}" /> </bootstrappers> <modificationset quietperiod="60"> <svn localWorkingCopy="projects/${project.name}" /> </modificationset> <schedule interval="300"> <maven2 mvnhome="/usr/share/maven2" pomfile="projects/${project.name}/pom.xml" goal="clean package sonar:sonar" /> </schedule> <log> <merge dir="projects/${project.name}/target"/> <merge dir="projects/${project.name}/target/site"/> <merge dir="projects/${project.name}/target/test-results"/> <merge file="projects/${project.name}/target/checkstyle-result.xml"/> <merge file="projects/${project.name}/target/pmd.xml"/> <merge file="projects/${project.name}/target/findbugsXml.xml"/> <merge file="projects/${project.name}/target/jdepend-report.xml"/> <merge file="projects/${project.name}/target/javancss-raw-report.xml"/> </log> <publishers> <onsuccess> <artifactspublisher dir="projects/${project.name}/target" dest="artifacts/${project.name}" /> </onsuccess> </publishers> </project> <!--xxx--> <!--<project name="xxx"> <listeners> <currentbuildstatuslistener file="logs/${project.name}/status.txt"/> </listeners> <bootstrappers> <antbootstrapper anthome="/usr/share/ant" buildfile="projects/${project.name}/build.xml" target="clean test" /> </bootstrappers> <modificationset quietperiod="30"> <filesystem folder="projects/${project.name}"/> </modificationset> <schedule interval="300"> <ant anthome="/usr/share/ant" buildfile="projects/${project.name}/build.xml"/> </schedule> <log> <merge dir="projects/${project.name}/target/test-results"/> </log> <publishers> <onsuccess> <artifactspublisher dest="artifacts/${project.name}" file="projects/${project.name}/target/${project.name}.war"/> </onsuccess> </publishers> </project>--> </cruisecontrol>
build.xml
<?xml version="1.0" encoding="utf-8"?> <project name="xxx" default="war" basedir="."> <!-- properties --> <property name="classpath" value="" /> <property name="src.dir" value="${basedir}/src" /> <property name="lib.dir" value="${basedir}/lib" /> <property name="java-src.dir" value="${src.dir}/main/java" /> <property name="test-src.dir" value="${src.dir}/main/test" /> <property name="build.dir" value="${basedir}/target" /> <property name="build.classes.dir" value="${build.dir}/classes" /> <property name="build.test-classes.dir" value="${build.dir}/test-classes" /> <property name="report.dir" value="${build.dir}/report" /> <property name="doc.dir" value="${build.dir}/doc" /> <!--sonar--> <property name="sonar.host.url" value="http://xxx.xxx.xxx.xxx:9000/sonar" /> <property name="sonar.jdbc.url" value="jdbc:mysql://localhost:3306/sonar?useUnicode=true&characterEncoding=utf8" /> <property name="sonar.jdbc.driverClassName" value="com.mysql.jdbc.Driver" /> <property name="sonar.jdbc.username" value="sonar" /> <property name="sonar.jdbc.password" value="sonar" /> <path id="master-classpath"> <fileset file="${lib.dir}/*.jar"> </fileset> </path> <path id="test-classpath"> <fileset file="${lib.dir}/*.jar"> </fileset> <fileset file="${build.classes.dir}"> <include name="**/*.class" /> </fileset> <fileset file="java-src.dir"> <include name="**/*.java"/> </fileset> </path> <!-- init --> <target name="init"> <delete dir="${build.dir}"> </delete> </target> <!-- compile --> <target name="compile" depends="init" description="compile the source files"> <mkdir dir="${build.classes.dir}" /> <javac srcdir="${java-src.dir}" destdir="${build.classes.dir}" target="1.6" includeantruntime="true"> <compilerarg line="-encoding utf-8" /> <classpath refid="master-classpath" /> </javac> </target> <!-- compiletest --> <target name="compiletest" depends="compile" description="compile the test files"> <mkdir dir="${build.test-classes.dir}" /> <javac srcdir="${test-src.dir}" destdir="${build.test-classes.dir}" target="1.6" includeantruntime="true"> <compilerarg line="-encoding utf-8" /> <classpath> <fileset file="${lib.dir}/*.jar" /> <pathelement path="${build.classes.dir}" /> <pathelement path="${build.test-classes.dir}" /> <pathelement path="${java.class.path}/" /> </classpath> </javac> </target> <target name="rmi-compile" depends="compiletest"> <rmic base="${build.classes.dir}" verify="true"> <classpath> <pathelement path="${build.classes.dir}" /> <pathelement path="${java.class.path}/" /> </classpath> <include name="**/*.class" /> <exclude name="**/test/*.class" /> </rmic> </target> <!-- test --> <target name="test" depends="rmi-compile" description="run junit test"> <mkdir dir="${report.dir}" /> <junit printsummary="true" haltonfailure="false" failureproperty="tests.failed" showoutput="true"> <classpath> <fileset file="${lib.dir}/*.jar" /> <pathelement location="lib/***.jar" /> <pathelement location="lib/***.jar" /> <pathelement path="${build.classes.dir}" /> <pathelement path="${build.test-classes.dir}" /> <pathelement path="${java.class.path}/" /> </classpath> <formatter type="plain" /> <batchtest fork="yes" todir="${report.dir}"> <fileset dir="${test-src.dir}"> <include name="**/*JUnitTest.java" /> </fileset> </batchtest> </junit> <fail if="tests.failed"> - **************************************************** *** One or more tests failed! Check the Output *** **************************************************** </fail> </target> <!-- pack --> <target name="pack" depends="test" description="make jar file"> <copy todir="${build.classes.dir}"> <fileset dir="${basedir}"> <exclude name="build.xml" /> <exclude name="复件**" /> <include name="*.xml" /> <include name="*.properties" /> <include name="*.dat" /> </fileset> </copy> <jar destfile="${build.dir}/${ant.project.name}.jar" basedir="${build.classes.dir}"> <exclude name="**/*Test.class" /> </jar> </target> <!-- doc --> <target name="doc" depends="pack" description="create api doc"> <mkdir dir="${doc.dir}" /> <javadoc destdir="${doc.dir}" author="true" version="true" use="true" windowtitle="GpsEDAgent_API"> <classpath refid="test-classpath"> </classpath> <packageset dir="${java-src.dir}" defaultexcludes="yes"> <include name="cn/eshore/cargps/**" /> </packageset> <doctitle> <![CDATA[<h1>Ant_Junit_xxx.com</h1>]]></doctitle> <bottom> <![CDATA[<i>All Rights Reserved.</i>]]></bottom> <tag name="todo" scope="all" description="To do:" /> </javadoc> </target> <!-- war --> <target name="war" depends="doc" description="make war file"> <mkdir dir="${lib.dir}" /> <war destfile="${build.dir}/${ant.project.name}.war" needxmlfile="false"> <fileset dir="${basedir}"> <exclude name="build.xml" /> <exclude name="复件**" /> <include name="*.xml" /> <include name="*.properties" /> <include name="*.dat" /> </fileset> <lib dir="${lib.dir}"></lib> <classes dir="${build.classes.dir}"> <exclude name="**/*Test.class" /> </classes> </war> </target> <!-- testreport --> <target name="gen-report-junit"> <mkdir dir="${report.dir}" /> <junitreport todir="${report.dir}"> <fileset dir="${report.dir}"> <include name="*" /> </fileset> <report format="frames" todir="${report.dir}" /> </junitreport> </target> <!-- testcoverage --> <target name="gen-report-coverage"> <emma> </emma> </target> <!-- all --> <target name="all" depends="war"> </target> <!-- sonar --> <target name="sonar"> <taskdef uri="antlib:org.sonar.ant" resource="org/sonar/ant/antlib.xml"> <classpath> <pathelement location="${lib.dir}/sonar-ant-task-1.3.jar"/> </classpath> </taskdef> <!-- list of mandatories Sonar properties --> <property name="sonar.sources" value="${java-src.dir}" /> <property name="sonar.projectKey" value="org.xxx:xxx" /> <!-- list of optional Sonar properties --> <!-- <property key="sonar.projectName" value="this value overrides the name defined in Ant root node" /> <property key="sonar.binaries" value="list of directories which contain for example the Java bytecode" /> <property key="sonar.tests" value="list of test source directories separated by a comma" /> <property key="sonar.libraries" value="list of paths to libraries separated by a comma (These libraries are for example used by the Sonar Findbugs plugin)" /> --> <sonar:sonar key="${sonar.projectKey}" version="1.0" xmlns:sonar="antlib:org.sonar.ant"/> </target> </project>