Code Snippet

Just another Code Snippet site

[Maven] Sonar, Code Coverage (UT/IT) for Single and Multi modules projects

Define Sonar / JaCoCo properties and define default Coverage report location (for no module project):

	<properties>
		<!-- Sonar -->
		<sonar.version>3.7.1-RC1</sonar.version>
		<sonar.language>java</sonar.language>
		<sonar.java.coveragePlugin>jacoco</sonar.java.coveragePlugin>
		<sonar.dynamicAnalysis>reuseReports</sonar.dynamicAnalysis>

		<!-- Default values for non multi modules project -->
		<jacoco.ut>${project.basedir}/target/jacoco-ut.exec</jacoco.ut>
		<jacoco.it>${project.basedir}/target/jacoco-it.exec</jacoco.it>

		<sonar.jacoco.reportPath>${jacoco.ut}</sonar.jacoco.reportPath>
		<sonar.jacoco.itReportPath>${jacoco.it}</sonar.jacoco.itReportPath>
	</properties>

Define JaCoCo plugin version :

		<pluginManagement>
			<plugins>
				<plugin>
					<groupId>org.jacoco</groupId>
					<artifactId>jacoco-maven-plugin</artifactId>
					<version>0.6.4.201312101107</version>
				</plugin>
			</plugins>
		</pluginManagement>

Define Multi module profile (by default, all sub project will be considered as single module/no module) :

		<profile>
			<id>MULTI_MODULE</id>
			<activation>
				<property>
					<name>MULTI_MODULE</name>
				</property>
			</activation>
			<properties>
				<!-- Override properties definition in case of multi module project -->
				<jacoco.ut>${project.basedir}/../target/jacoco-ut.exec</jacoco.ut>
				<jacoco.it>${project.basedir}/../target/jacoco-it.exec</jacoco.it>
				<sonar.jacoco.reportPath>${jacoco.ut}</sonar.jacoco.reportPath>
				<sonar.jacoco.itReportPath>${jacoco.it}</sonar.jacoco.itReportPath>		
			</properties>
		</profile>

Define UnitTesting (UT) profile :

		<!-- UnitTesting -->
		<profile>
			<id>UnitTesting</id>
			<activation>
				<property>
					<name>!UTSkip</name>
				</property>
			</activation>
			<build>
				<plugins>
					<plugin>
						<groupId>org.apache.maven.plugins</groupId>
						<artifactId>maven-surefire-plugin</artifactId>
						<version>2.4</version>
						<configuration>
							<properties>
								<property>
									<name>listener</name>
									<value>org.sonar.java.jacoco.JUnitListener</value>
								</property>
							</properties>
							<includes>
								<include>**/*Test.class</include>
								<include>**/*Test.java</include>
								<include>**/*Test</include>
							</includes>
						</configuration>
					</plugin>
				</plugins>
			</build>
		</profile>

Define IntegrationTesting (IT) profile :

		<!-- IntegrationTesting -->
		<profile>
			<id>IntegrationTesting</id>
			<activation>
				<property>
					<name>!ITSkip</name>
				</property>
			</activation>
			<build>
				<plugins>
					<plugin>
						<groupId>org.apache.maven.plugins</groupId>
						<artifactId>maven-failsafe-plugin</artifactId>
						<!-- Minimal supported version is 2.4 -->
						<version>2.16</version>
						<executions>
							<execution>
								<id>IntegrationTesting</id>
								<goals>
									<goal>integration-test</goal>
									<goal>verify</goal>
								</goals>
								<configuration>
									<includes>
										<include>**/*IT.class</include>
										<include>**/*IT.java</include>
										<include>**/*IT</include>
									</includes>
								</configuration>
							</execution>
						</executions>
					</plugin>
				</plugins>
			</build>
		</profile>

Define Jenkins / Code Coverage profile :

		<profile>
			<id>JENKINS</id>
			<activation>
				<property>
					<name>BUILD_NUMBER</name>
				</property>
			</activation>
			<build> 
				<plugins>

					<plugin>
						<groupId>org.jacoco</groupId>
						<artifactId>jacoco-maven-plugin</artifactId>
						<executions>
							<execution>
								<id>pre-UT</id>
								<phase>process-test-classes</phase>
								<goals>
									<goal>prepare-agent</goal>
								</goals>
								<configuration>
									<include>**/*Test.class</include>
									<include>**/*Test.java</include>
									<include>**/*Test</include>
									<destFile>${jacoco.ut}</destFile>
								</configuration>
							</execution>
							<execution>
								<id>post-UT</id>
								<phase>test</phase>
								<goals>
									<goal>report</goal>
								</goals>
								<configuration>
									<include>**/*Test.class</include>
									<include>**/*Test.java</include>
									<include>**/*Test</include>
									<destFile>${jacoco.ut}</destFile>
								</configuration>
							</execution>
							<execution>
								<id>pre-IT</id>
								<phase>pre-integration-test</phase>
								<goals>
									<goal>prepare-agent</goal>
								</goals>
								<configuration>
									<destFile>${jacoco.it}</destFile>
									<include>**/*IT.class</include>
									<include>**/*IT.java</include>
									<include>**/*IT</include>
								</configuration>
							</execution>
							<execution>
								<id>post-IT</id>
								<phase>verify</phase>
								<goals>
									<goal>report</goal>
								</goals>
								<configuration>
									<destFile>${jacoco.it}</destFile>
									<include>**/*IT.class</include>
									<include>**/*IT.java</include>
									<include>**/*IT</include>
								</configuration>
							</execution>
						</executions>
					</plugin>
				</plugins>
			</build>

			<dependencies>
				<dependency>
					<groupId>org.codehaus.sonar-plugins.java</groupId>
					<artifactId>sonar-jacoco-listeners</artifactId>
					<version>1.5</version>
					<scope>test</scope>
				</dependency>
			</dependencies>

		</profile>

To enable the mutli modules mode, use the profile -PMULTI_MODULE in maven build or add the properties -DMULTI_MODULE=true in Sonar build :

sonar

,


Comments are currently closed.