Skip to content
Snippets Groups Projects
build-common.xml 6.31 KiB
<project name="build-common" basedir="..">
	<import file="build-basic.xml" />

	<property name="lib" value="../libraries" />
	<taskdef name="build-info"
	         classname="ch.systemsx.cisd.ant.task.subversion.GatherRevisionAndVersionTask"
	         classpathref="build-resource.path" />
	<taskdef name="build-java-subprojects"
	         classname="ch.systemsx.cisd.ant.task.subprojectbuilder.BuildJavaSubprojectsTask"
	         classpathref="build-resource.path" />
	<taskdef name="project-classpath"
	         classname="ch.systemsx.cisd.ant.task.SetEclipseClasspathTask"
	         classpathref="build-resource.path" />
	<typedef name="recursive-jar"
	         classname="ch.systemsx.cisd.ant.task.RecursiveJar"
	         classpathref="build-resource.path" />
	<taskdef resource="testngtasks" classpath="../libraries/testng/testng-jdk15.jar" />
	<taskdef name="dependency-checker"
	         classname="classycle.ant.DependencyCheckingTask"
	         classpath="${lib}/classycle/classycle.jar" />

	<property name="build.compiler" value="org.eclipse.jdt.core.JDTCompilerAdapter" />
	<property name="server-resource" value="${resource}/server" />
	<property name="sources" value="source/java" />
	<property name="sources.test" value="sourceTest/java" />
	<property name="classes" value="${targets}/ant/classes" />
	<property name="output.test" value="${targets}/test-output" />
	<property name="build.info.filename" value="BUILD-${ant.project.name}.INFO" />
	<property name="build.info.file" value="${classes}/${build.info.filename}" />

	<!-- The name of the file containing checksums for all properties files -->
	<property name="checksum.file.name" value="configuration.MD5" />
	<property name="checksum.file" value="${dist}/${checksum.file.name}" />

	<!--
      // Dummy target used by cruisecontrol
      -->
	<target name="_dummy" description="Dummy target used by cruisecontrol" />

	<target name="prepare">
		<delete dir="${classes}" />
		<mkdir dir="${classes}" />
	</target>

	<target name="compile" unless="compile.bypass">
		<build-java-subprojects target="_plain-compile-sources"/>
		<antcall target="_plain-compile-sources" />
	</target>

	<target name="compile-tests" depends="compile">
		<build-java-subprojects target="_plain-compile-tests"/>
		<antcall target="_plain-compile-tests" />
	</target>

	<target name="check-dependencies" depends="compile">
		<antcall target="check-dependencies-no-compile" />
	</target>

	<target name="check-dependencies-no-compile">
		<dependency-checker definitionFile="resource/dependency-structure.ddf"
		                    failOnUnwantedDependencies="true"
		                    mergeInnerClasses="true">
			<fileset dir="${classes}">
				<include name="**/*.class" />
			</fileset>
		</dependency-checker>
	</target>

	<target name="_plain-compile-sources" depends="prepare">
		<antcall target="_plain-compile">
			<param name="src" value="${sources}" />
		</antcall>
	</target>
	
	<target name="_plain-compile-tests">
		<antcall target="_plain-compile">
			<param name="src" value="${sources.test}" />
		</antcall>
	</target>

	<!--
      // Compile Java classes using the Eclipse compiler 
      // Note: THIS IS A PRIVATE TARGET. It isn't intended to be used in other build scripts.
      // Parameter: src = source folder
      -->
	<target name="_plain-compile">
		<echo level="info">Compile all classes in ${basedir}/${src} and subfolders</echo>
		<javac srcdir="${src}"
		       destdir="${classes}"
		       classpath="${ecp}"
		       source="1.6"
		       target="1.6"
			     encoding="UTF-8"
		       debug="true">
			<compilerarg line="-warn:none" />
		</javac>
		<copy todir="${classes}">
			<fileset dir="${src}">
				<include name="**/*.xml" />
				<include name="**/*.xsd" />
				<include name="**/*.properties" />
				<include name="**/*.jpg" />
				<include name="**/*.png" />
				<include name="**/*.gif" />
			</fileset>
		</copy>
	</target>

	<!--
      // Runs a TestNG test suite
      // Parameter: test.suite = path of test suite relative to the test source folder
      -->
	
	<target name="_run-testng">
		
		<testng classpath="${ecp}"
		        workingDir="."
		        outputdir="${output.test}"
		        failureproperty="${failure.property}">
			<xmlfileset dir="${sources.test}" includes="${test.suite}" />
			<jvmarg value="-Xmx1024M" />
			<jvmarg value="-XX:MaxPermSize=512m" />
		</testng>
		
	</target>
	
	<target name="run-tests" depends="compile-tests">
		<delete dir="${output.test}" />
		
		<antcall target="_run-testng">
			<param name="test.suite" value="${test.suite}" />
			<param name="failure.property" value="tests.failed" />
		</antcall>
				
		<junitreport todir="${output.test}">
			<fileset dir="${output.test}">
				<include name="*/*.xml" />
			</fileset>
			<report format="noframes" todir="${output.test}" />
		</junitreport>
		<fail if="tests.failed" message="At least one test failed." />
	</target>

	<target name="ci">
		<antcall target="run-tests">
			<param name="test.suite" value="tests.xml" />
		</antcall>
		<antcall target="check-restrictions" />
	</target>
  
  <!-- 
     1. Compiles productive and test code
     2. Checks restrictions (@Friend-@Private annotations)
     3. Checks dependencies (defined in /dependency-structure.ddf)
  -->
  <target name="compile-and-check" depends="check-restrictions, check-dependencies"/>

	<target name="check-restrictions" depends="compile, compile-tests">
		<exec executable="sh" failonerror="true">
			<arg value="../libraries/restrictionchecker/jrc" />
			<arg value="-r" />
			<arg value="../${mainfolder}/${classes}" />
			<!--arg value="-jd" />
			<arg value="../libraries" /-->
			<arg value="-cp" />
			<arg value="${ecp}" />
		</exec>
	</target>

	<!-- = = = = = = = = = = = = = = = = =
          macrodef: concat-checksums   
          Take checksum files located in the ${dist} directory, concatenate
          them into one file and delete the individual files.     
         = = = = = = = = = = = = = = = = = -->
	<macrodef name="concat-checksums">
		<sequential>
			<concat destfile="${checksum.file}">
				<!-- If a configuration.MD5 file is already in the directory, ignore it -->
				<fileset dir="${dist}" excludes="${checksum.file.name}">
					<include name="**/*.MD5"/>
				</fileset>
			</concat>
			<delete>
				<fileset dir="${dist}" excludes="${checksum.file.name}">
					<include name="**/*.MD5"/>
				</fileset>
			</delete>
		</sequential>
	</macrodef>

</project>