ANT build tool

Creating a Session ID

Before running the build scan and tests, you need to create a session ID. The session ID is provided to each step in order to link them together as one complete cycle.

Generating a session ID in Java is done using the Java Build scanner with the -config flag. This command can be executed as an ANT Java task.

<tstamp>
     <format property="time.stamp" pattern="yyyyMMdd-HHmm"/>
</tstamp>

<target name="sealights_config">
	<java jar="${sealights.dir}/sl-build-scanner.jar" fork="true">
		<arg value="-config"/>
		<arg value="-tokenfile"/>
		<arg value="${sealights.dir}/sltoken.txt"/>
		<arg value="-appname"/>
		<arg value="myApp"/>
		<arg value="-branchname"/>
		<arg value="master"/>
		<arg value="-buildname"/>
		<arg value="${time.stamp}"/>
		<arg value="-pi"/>
		<arg value="*com.company.*"/>
	</java>
</target>

In the sample code above, we have used a timestamp for the build name but any environment variable can be used according to your organization’s naming convention.

See Creating a session ID for full parameter details

Scanning a build

In order to collect coverage information SeaLights, agents need to first scan the binary files for the build information: it can be the *.class, *.jar, or even the *.war files.

Scanning a build in ANT is achieved using the Java Build scanner executed as an ANT Java task.

<target name="sealights_scan" depends="compile,sealights_config">
    <java jar="${sealights.dir}/sl-build-scanner.jar" fork="true">
		<arg value="-scan"/>
		<arg value="-tokenfile"/>
		<arg value="${sealights.dir}/sltoken.txt"/>
		<arg value="-buildsessionidfile"/>
		<arg value="buildSessionId.txt"/>
		<arg value="-workspacepath"/>
		<arg value="${build}"/>
		<arg value="-r"/>
		<arg value="-fi"/>
		<arg value="*.class"/>
	</java>
</target>
  • In order to add logs flags, you need to add the <jvmarg> values like below <jvmarg value="-Dsl.log.toConsole=true"/> <jvmarg value="-Dsl.log.level=info"/>

See Scanning a build for full parameter details

Running tests using JUnit

In order to capture code coverage information from tests run with JUnit, you need to run it with our test listener as a Java agent.

JUnit 4.x

  • The listener needs to be passed using the jvmarg attribute -javaagent parameter together with its required parameters.

<junit fork="yes">
  <jvmarg value="-javaagent:${sealights.dir}/sl-test-listener.jar"/>
  <jvmarg value="-Dsl.tokenFile=${sealights.dir}/sltoken.txt"/>
  <jvmarg value="-Dsl.buildSessionIdFile=buildSessionId.txt"/>
  <jvmarg value="-Dsl.testStage=Unit Tests"/>
</junit>

JUnit 5.x

  1. When tests are running in the same process, the listener needs to be passed using the jvmarg attribute -javaagent parameter with Sealights' Anonymous Execution mode deactivated.

  2. When tests are running in a different process (via a fork), we need to add the start and end commands before and after tests execution

<junitlauncher>
	<testclasses outputdir="build/test-report">
		<jvmarg value="-javaagent:${sealights.dir}/sl-test-listener.jar"/>
		<jvmarg value="-Dsl.tokenFile=${sealights.dir}/sltoken.txt"/>
		<jvmarg value="-Dsl.buildSessionIdFile=buildSessionId.txt"/>
		<jvmarg value="-Dsl.anonymousExecution=false"/>
		<jvmarg value="-Dsl.testStage=Unit Tests"/>
	</testclasses>
	...
</junitlauncher>

See Installing test listener as Java Agent for full parameter details

Sample integration into an existing ANT project

In order to keep backward compatibility, you can use the ant:if condition to execute Sealights commands according to a boolean. In the sample below, you’ll be required to add -Dsealights=true to your ANT command in order to enable the agents.

The sample below does not contain the command themselves for clarity. Please replace the <echo> lines with commands explained in previous sections.

<project name="sl-ant-sample" xmlns:if="ant:if">

    <target name="compile">
		<echo>Compiling the JAR</echo>
		<antcall if:true="${sealights}" target="sealights_scan" />
    </target>

	<target name="sealights_config">
		<echo>Sealights -- Create BSID</echo>
	</target>

	<target name="sealights_scan" depends="sealights_config">
		<echo>Sealights -- Scan artefacts</echo>
	</target>

	<target name="junit">
		<echo if:true="${sealights}">Sealights -- Add JVM arg</echo>
		<echo>Regular</echo>
  	</target>

</project>

Here is a comparison of executions with and without the sealigths parameter set to true.

Last updated

Was this helpful?