<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>

	<groupId>io.earcam</groupId>
	<artifactId>io.earcam.maven</artifactId>
	<version>2.1.2</version>
	<packaging>pom</packaging>

	<name>${project.artifactId}</name>
	<description>DRY Maven: parent/root POM, maven site skin and toolchains.xml</description>
	<url>http://bitbucket.org/earcam/io.earcam.maven</url>
	<inceptionYear>2014</inceptionYear>
	<organization>
		<name>earcam</name>
		<url>https://earcam.io</url>
	</organization>
	<licenses>
		<license>
			<name>The Apache License, Version 2.0</name>
			<!-- <url>https://www.apache.org/licenses/LICENSE-2.0</url> -->
			<url>http://www.apache.org/licenses/LICENSE-2.0.txt</url>
			<distribution>repo</distribution>
		</license>
		<license>
			<name>BSD 3-Clause License</name>
			<url>https://opensource.org/licenses/BSD-3-Clause</url>
			<distribution>repo</distribution>
		</license>
		<license>
			<name>Eclipse Public License</name>
			<url>https://www.eclipse.org/legal/epl-v10.html</url>
			<distribution>repo</distribution>
		</license>
		<license>
			<name>MIT License</name>
			<url>https://opensource.org/licenses/MIT</url>
			<distribution>repo</distribution>
		</license>
	</licenses>

	<developers>
		<developer>
			<name>Caspar J. MacRae</name>
			<id>earcam</id>
			<timezone>Europe/London</timezone>
			<url>https://ea.rc.am</url>
		</developer>
	</developers>

	<modules>
		<module>io.earcam.maven.configuration</module>
		<module>io.earcam.maven.pom</module>
		<module>io.earcam.maven.toolchain</module>
		<module>io.earcam.maven.site.skin</module>
		<module>io.earcam.maven.site.skin.scalp</module>
	</modules>

	<scm>
		<connection>scm:git:ssh://git@bitbucket.org/earcam/io.earcam.maven.git</connection>
		<developerConnection>scm:git:ssh://git@bitbucket.org/earcam/io.earcam.maven.git</developerConnection>
		<url>http://bitbucket.org/earcam/io.earcam.maven.git</url>
		<tag>v2.1.2</tag>
	</scm>
	<ciManagement>
		<system>Jenkins</system>
		<url>https://travis-ci.org/earcam/io.earcam.maven</url>
	</ciManagement>
	<distributionManagement>
		<snapshotRepository>
			<id>ossrh</id>
			<url>https://oss.sonatype.org/content/repositories/snapshots</url>
		</snapshotRepository>
		<repository>
			<id>ossrh</id>
			<url>https://oss.sonatype.org/service/local/staging/deploy/maven2/</url>
		</repository>
	</distributionManagement>

	<properties>
		<!-- can't use ${project.version} for dependency in maven-site-plugin as inherited first then resolved-->
		<earcam.maven.project.version>2.1.2</earcam.maven.project.version>
	
		<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>

		<version.java.platform>8</version.java.platform>
		<version.java>1.${version.java.platform}</version.java>
		<maven.compiler.source>${version.java}</maven.compiler.source>
		<maven.compiler.target>${version.java}</maven.compiler.target>

		<!-- enable to set available plugins' custom verbosity, capture intermediate generated files, etc -->
		<earcam.build.debug>false</earcam.build.debug>


		<coordinate.username.project>earcam/${project.artifactId}</coordinate.username.project>

		<sonar.java.source>${version.java.platform}</sonar.java.source>

		<version.pitest>1.2.3</version.pitest>
		<version.jacoco>0.7.9</version.jacoco>
		
		<version.maven.plugin.site>3.6</version.maven.plugin.site>
		
		<version.min.maven>3.3.9</version.min.maven>

		<skip.execution.pitest>true</skip.execution.pitest>
		
		<site.url>http://localhost:8080/</site.url>
		<earcam.project.name.short />
		
	</properties>

	<build>
		<pluginManagement>
			<plugins>
				<plugin>
					<groupId>org.eclipse.m2e</groupId>
					<artifactId>lifecycle-mapping</artifactId>
					<version>1.0.0</version>
					<configuration>
						<lifecycleMappingMetadata>
							<pluginExecutions>
								<pluginExecution>
									<pluginExecutionFilter>
										<groupId>org.apache.maven.plugins</groupId>
										<artifactId>maven-toolchains-plugin</artifactId>
										<versionRange>[1.1,)</versionRange>
										<goals>
											<goal>toolchain</goal>
										</goals>
									</pluginExecutionFilter>
									<action>
										<ignore />
									</action>
								</pluginExecution>
								<pluginExecution>
									<pluginExecutionFilter>
										<groupId>org.apache.maven.plugins</groupId>
										<artifactId>maven-scm-plugin</artifactId>
										<versionRange>[1.9.5,)</versionRange>
										<goals>
											<goal>checkout</goal>
										</goals>
									</pluginExecutionFilter>
									<action>
										<ignore />
									</action>
								</pluginExecution>
								<pluginExecution>
									<pluginExecutionFilter>
										<groupId>io.swagger</groupId>
										<artifactId>swagger-codegen-maven-plugin</artifactId>
										<versionRange>[2.2.2,)</versionRange>
										<goals>
											<goal>generate</goal>
										</goals>
									</pluginExecutionFilter>
									<action>
										<ignore />
									</action>
								</pluginExecution>

								<pluginExecution>
									<pluginExecutionFilter>
										<groupId>net.revelc.code.formatter</groupId>
										<artifactId>formatter-maven-plugin</artifactId>
										<versionRange>[2.0.1,)</versionRange>
										<goals>
											<goal>validate</goal>
										</goals>
									</pluginExecutionFilter>
									<action>
										<ignore />
									</action>
								</pluginExecution>
								
								<pluginExecution>
									<pluginExecutionFilter>
										<groupId>org.codehaus.mojo</groupId>
										<artifactId>tidy-maven-plugin</artifactId>
										<versionRange>[1.0.0,)</versionRange>
										<goals>
											<goal>check</goal>
										</goals>
									</pluginExecutionFilter>
									<action>
										<ignore />
									</action>
								</pluginExecution>
							</pluginExecutions>
						</lifecycleMappingMetadata>
					</configuration>
				</plugin>

				<plugin>
					<groupId>org.apache.maven.plugins</groupId>
					<artifactId>maven-clean-plugin</artifactId>
					<version>2.6</version>
				</plugin>
			
				<plugin>
					<groupId>org.apache.maven.plugins</groupId>
					<artifactId>maven-install-plugin</artifactId>
					<version>2.5.2</version>
				</plugin>
			
				<plugin>
					<groupId>org.apache.maven.plugins</groupId>
					<artifactId>maven-resources-plugin</artifactId>
					<version>2.7</version>
				</plugin>

				<plugin>
					<groupId>org.apache.maven.plugins</groupId>
					<artifactId>maven-toolchains-plugin</artifactId>
					<version>1.1</version>
					<executions>
						<execution>
							<goals>
								<goal>toolchain</goal>
							</goals>
						</execution>
					</executions>
				</plugin>

				<plugin>
					<groupId>org.apache.maven.plugins</groupId>
					<artifactId>maven-site-plugin</artifactId>
					<version>${version.maven.plugin.site}</version>
					<configuration>
						<validate>true</validate>
						<inputEncoding>${project.reporting.outputEncoding}</inputEncoding>
						<outputEncoding>${project.reporting.outputEncoding}</outputEncoding>
						<saveProcessedContent>${earcam.build.debug}</saveProcessedContent>
						<topSiteURL>${site.url}</topSiteURL>
						
						<generateSitemap>false</generateSitemap><!-- fails to produce valid target/generated-site/xdoc/sitemap.xml -->
					</configuration>
					<dependencies>
						<dependency>
							<groupId>io.earcam.maven</groupId>
							<artifactId>io.earcam.maven.site.skin.scalp</artifactId>
							<version>${earcam.maven.project.version}</version>
						</dependency>
					</dependencies>
				</plugin>

				<plugin>
					<groupId>org.revapi</groupId>
					<artifactId>revapi-maven-plugin</artifactId>
					<version>0.9.2</version>
					<configuration>
						<failOnUnresolvedArtifacts>false</failOnUnresolvedArtifacts>
						<failOnUnresolvedDependencies>false</failOnUnresolvedDependencies>
						<analysisConfiguration>
							<revapi.semver.ignore>
								<enabled>true</enabled>
								<versionIncreaseAllows>
									<major>breaking</major>
									<minor>nonBreaking</minor>
									<patch>equivalent</patch>
								</versionIncreaseAllows>
								<passThroughDifferences>
									<item>java.class.nonPublicPartOfAPI</item>
								</passThroughDifferences>
							</revapi.semver.ignore>
						</analysisConfiguration>
					</configuration>
					<dependencies>
						<dependency>
							<groupId>org.revapi</groupId>
							<artifactId>revapi-java</artifactId>
							<version>0.14.1</version>
						</dependency>
					</dependencies>
				</plugin>
				
				<plugin>
					<groupId>org.jacoco</groupId>
					<artifactId>jacoco-maven-plugin</artifactId>
					<version>${version.jacoco}</version>
					<configuration>
						<excludes>
							<exclude>**/HelpMojo.*</exclude>
						</excludes>
					</configuration>
				</plugin>
				
				<plugin>
					<groupId>org.pitest</groupId>
					<artifactId>pitest-maven</artifactId>
					<version>${version.pitest}</version>
					<configuration>
						<verbose>${earcam.build.debug}</verbose>
						<skip>${skip.execution.pitest}</skip>
						<inScopeClasses>
							<param>io.earcam.*</param>
						</inScopeClasses>
						<targetClasses>
							<param>${project.artifactId}.*</param>
						</targetClasses>
						<targetTests>
							<param>io.earcam.*</param>
						</targetTests>
						<outputFormats>
							<outputFormat>XML</outputFormat>
							<outputFormat>HTML</outputFormat>
						</outputFormats>
					</configuration>
				</plugin>
				
				<plugin>
					<groupId>org.apache.maven.plugins</groupId>
					<artifactId>maven-gpg-plugin</artifactId>
					<version>1.6</version>
				</plugin>
				
				<plugin>
					<groupId>org.apache.maven.plugins</groupId>
					<artifactId>maven-source-plugin</artifactId>
					<version>3.0.1</version>
				</plugin>
				
				<plugin>
					<groupId>org.apache.maven.plugins</groupId>
					<artifactId>maven-javadoc-plugin</artifactId>
					<version>3.0.0-M1</version>
					<configuration>
						<doclet>org.umlgraph.doclet.UmlGraphDoc</doclet>
						<docletArtifact>
							<groupId>org.umlgraph</groupId>
							<artifactId>umlgraph</artifactId>
							<version>5.6.6</version>
						</docletArtifact>
						<!--
						http://www.umlgraph.org/doc/indexw.html
						http://www.umlgraph.org/doc/cd-umldoc.html
						 -->
						<additionalparam>-views -all -inferdep -inferrel</additionalparam>
						<useStandardDocletOptions>true</useStandardDocletOptions>
						<detectLinks>true</detectLinks>
						<links>
							<link>http://docs.oracle.com/javase/${version.java.platform}/docs/api</link>
						</links>
						<failOnError>false</failOnError>
						<verbose>${earcam.build.debug}</verbose>
						<debug>${earcam.build.debug}</debug>
					</configuration>
				</plugin>

				<plugin>
					<groupId>org.apache.maven.plugins</groupId>
					<artifactId>maven-deploy-plugin</artifactId>
					<version>2.8.2</version>
					<configuration>
						<deployAtEnd>true</deployAtEnd>
					</configuration>
				</plugin>

				<plugin>
					<groupId>org.apache.maven.plugins</groupId>
					<artifactId>maven-enforcer-plugin</artifactId>
					<version>1.4.1</version>
				</plugin>

				<plugin>
					<groupId>org.apache.maven.plugins</groupId>
					<artifactId>maven-release-plugin</artifactId>
					<version>2.5.3</version>
				</plugin>

				<plugin>
					<groupId>org.sonatype.plugins</groupId>
					<artifactId>nexus-staging-maven-plugin</artifactId>
					<version>1.6.8</version>
				</plugin>

				<plugin>
					<groupId>org.codehaus.mojo</groupId>
					<artifactId>tidy-maven-plugin</artifactId>
					<version>1.0.0</version>
					<!-- thankfully this plugin doesn't mandate the idiotic preference for spaces over tabs -->
				</plugin>

				<plugin>
					<groupId>net.revelc.code.formatter</groupId>
					<artifactId>formatter-maven-plugin</artifactId>
					<version>2.0.1</version>
					<configuration>
						<configFile>META-INF/eclipse/java-formatter.xml</configFile>
						<configJsFile>META-INF/eclipse/javascript-formatter.xml</configJsFile>
					</configuration>
					<dependencies>
						<dependency>
							<groupId>io.earcam.maven</groupId>
							<artifactId>io.earcam.maven.configuration</artifactId>
							<version>${earcam.maven.project.version}</version>
						</dependency>
					</dependencies>
				</plugin>

				<plugin>
					<groupId>org.owasp</groupId>
					<artifactId>dependency-check-maven</artifactId>
					<version>2.1.0</version>
				</plugin>

				<plugin>
					<groupId>org.apache.maven.plugins</groupId>
					<artifactId>maven-invoker-plugin</artifactId>
					<version>3.0.1</version>
				</plugin>

				<plugin>
					<groupId>org.codehaus.mojo</groupId>
					<artifactId>license-maven-plugin</artifactId>
					<version>1.13</version>
					<configuration>
						<addJavaLicenseAfterPackage>false</addJavaLicenseAfterPackage>
						<licenseName>earcam_beam</licenseName>
						<licenseResolver>classpath://META-INF/license</licenseResolver>
						<includes>
							<include>**/*.java</include>
							<include>**/*.js</include>
							<include>**/*.groovy</include>
							<include>**/*.sh</include>
							<include>**/*.xml</include>
						</includes>
						<roots>
							<!-- don't bother with generated/processed sources -->
							<root>src</root> 
						</roots>
					</configuration>
					<dependencies>
						<dependency>
							<groupId>io.earcam.maven</groupId>
							<artifactId>io.earcam.maven.configuration</artifactId>
							<version>${earcam.maven.project.version}</version>
						</dependency>
					</dependencies>
				</plugin>

				<plugin>
					<groupId>org.apache.maven.plugins</groupId>
					<artifactId>maven-surefire-plugin</artifactId>
					<version>2.20.1</version>
					<configuration>
						<includes>
							<include>**/*Test.java</include>
						</includes>
						<excludes>
							<exclude>**/*IntegrationTest.java</exclude>
						</excludes>
					</configuration>
				</plugin>					
				
				<plugin>
					<groupId>org.apache.maven.plugins</groupId>
					<artifactId>maven-failsafe-plugin</artifactId>
					<version>2.20.1</version>
					<executions>
						<execution>
							<goals>
								<goal>integration-test</goal>
								<goal>verify</goal>
							</goals>
							<configuration>
								<testFailureIgnore>false</testFailureIgnore>
								<includes>
									<include>**/*IntegrationTest.java</include>
								</includes>
							</configuration>
						</execution>
					</executions>
				</plugin>
			</plugins>
		</pluginManagement>
	</build>

	<profiles>
		<profile>
			<id>strict</id>
			<activation>
				<activeByDefault>true</activeByDefault>
			</activation>

			<build>
				<plugins>
					<plugin>
						<groupId>org.apache.maven.plugins</groupId>
						<artifactId>maven-toolchains-plugin</artifactId>
					</plugin>

					<plugin>
						<groupId>org.apache.maven.plugins</groupId>
						<artifactId>maven-surefire-plugin</artifactId>
					</plugin>

					<plugin>
						<groupId>org.apache.maven.plugins</groupId>
						<artifactId>maven-failsafe-plugin</artifactId>
					</plugin>

					<plugin>
						<groupId>org.apache.maven.plugins</groupId>
						<artifactId>maven-enforcer-plugin</artifactId>
						<configuration>
							<rules>
								<banTransitiveDependencies>
									<excludes>
										<exclude>*:*:*:*:test</exclude>
										<exclude>*:*:*:*:system</exclude>
									</excludes>
								</banTransitiveDependencies>
								<!-- <dependencyConvergence /> --> <!-- can't configure dependencyConvergence to ignore test dependencies ... -->
								<requireMavenVersion>
									<version>${version.min.maven}</version>
								</requireMavenVersion>
							</rules>
							<fail>true</fail>
						</configuration>
						<executions>
							<execution>
								<id>strict-enforce</id>
								<goals>
									<goal>enforce</goal>
								</goals>
							</execution>
						</executions>
					</plugin>

					<plugin>
						<groupId>org.revapi</groupId>
						<artifactId>revapi-maven-plugin</artifactId>
						<executions>
							<execution>
								<id>strict-semver</id>
								<goals>
									<goal>check</goal>
								</goals>
							</execution>
						</executions>
					</plugin>

					<plugin>
						<groupId>org.codehaus.mojo</groupId>
						<artifactId>tidy-maven-plugin</artifactId>
						<executions>
							<execution>
								<id>strict-pom</id>
								<phase>validate</phase>
								<goals>
									<goal>check</goal>
								</goals>
							</execution>
						</executions>
					</plugin>

					<plugin>
						<groupId>org.owasp</groupId>
						<artifactId>dependency-check-maven</artifactId>
						<configuration>
							<failBuildOnAnyVulnerability>true</failBuildOnAnyVulnerability>
						</configuration>
						<executions>
							<execution>
								<id>strict-owasp</id>
								<goals>
									<goal>check</goal>
								</goals>
							</execution>
						</executions>
					</plugin>

					<plugin>
						<groupId>de.thetaphi</groupId>
						<artifactId>forbiddenapis</artifactId>
						<version>2.4.1</version>
						<executions>
							<execution>
								<id>check</id>
								<goals>
									<goal>check</goal>
								</goals>
								<configuration>
									<failOnUnsupportedJava>false</failOnUnsupportedJava>
									<bundledSignatures>
										<bundledSignature>jdk-unsafe</bundledSignature>
										<bundledSignature>jdk-deprecated</bundledSignature>
										<bundledSignature>jdk-non-portable</bundledSignature>
										<bundledSignature>jdk-system-out</bundledSignature>
										<bundledSignature>jdk-reflection</bundledSignature>
									</bundledSignatures>
								</configuration>
							</execution>
							<execution>
								<id>test-check</id>
								<goals>
									<goal>testCheck</goal>
								</goals>
								<configuration>
									<failOnUnsupportedJava>false</failOnUnsupportedJava>
									<bundledSignatures>
										<bundledSignature>jdk-unsafe</bundledSignature>
										<bundledSignature>jdk-deprecated</bundledSignature>
										<bundledSignature>jdk-non-portable</bundledSignature>
										<bundledSignature>jdk-system-out</bundledSignature>
										<!-- <bundledSignature>jdk-reflection</bundledSignature> -->
									</bundledSignatures>
								</configuration>
							</execution>
						</executions>
					</plugin>
				</plugins>
			</build>
		</profile>

		<profile>
			<id>tidy</id>
			<activation>
				<activeByDefault>false</activeByDefault>
			</activation>

			<build>
				<defaultGoal>clean install tidy:pom</defaultGoal>

				<plugins>
					<plugin>
						<groupId>org.apache.maven.plugins</groupId>
						<artifactId>maven-scm-plugin</artifactId>
						<version>1.9.5</version>
						<executions>
							<execution>
								<id>tidy-fail-scm-uncommitted</id>
								<goals>
									<goal>check-local-modification</goal>
								</goals>
								<phase>validate</phase>
								<configuration>
									<errorMessage>Commit and push changes before running auto tidy</errorMessage>
								</configuration>
							</execution>
						</executions>
					</plugin>
				</plugins>
			</build>
		</profile>

		<profile>
			<id>jdk-oracle</id>
			
			<activation>
				<activeByDefault>true</activeByDefault>
			</activation>
			
			<build>
				<plugins>
					<plugin>
						<groupId>org.apache.maven.plugins</groupId>
						<artifactId>maven-toolchains-plugin</artifactId>
						<configuration>
							<toolchains>
								<jdk>
									<version>${maven.compiler.target}</version>
									<vendor>oracle</vendor>
								</jdk>
							</toolchains>
						</configuration>
					</plugin>				
				</plugins>
			</build>
		</profile>

		<profile>
			<id>jdk-azul</id>
			
			<activation>
				<activeByDefault>false</activeByDefault>
			</activation>
			
			<build>
				<plugins>
					<plugin>
						<groupId>org.apache.maven.plugins</groupId>
						<artifactId>maven-toolchains-plugin</artifactId>
						<configuration>
							<toolchains>
								<jdk>
									<version>${maven.compiler.target}</version>
									<vendor>azul</vendor>
								</jdk>
							</toolchains>
						</configuration>
					</plugin>				
				</plugins>
			</build>
		</profile>

		<profile>
			<id>jdk-openjdk</id>
			
			<activation>
				<activeByDefault>false</activeByDefault>
			</activation>
			
			<build>
				<plugins>
					<plugin>
						<groupId>org.apache.maven.plugins</groupId>
						<artifactId>maven-toolchains-plugin</artifactId>
						<configuration>
							<toolchains>
								<jdk>
									<version>${maven.compiler.target}</version>
									<vendor>openjdk</vendor>
								</jdk>
							</toolchains>
						</configuration>
					</plugin>				
				</plugins>
			</build>
		</profile>

		<profile>
			<id>jdk-ibm</id>
			
			<activation>
				<activeByDefault>false</activeByDefault>
			</activation>
			
			<build>
				<plugins>
					<plugin>
						<groupId>org.apache.maven.plugins</groupId>
						<artifactId>maven-toolchains-plugin</artifactId>
						<configuration>
							<toolchains>
								<jdk>
									<version>${maven.compiler.target}</version>
									<vendor>ibm</vendor>
								</jdk>
							</toolchains>
						</configuration>
					</plugin>				
				</plugins>
			</build>
		</profile>

		<profile>
			<!-- 
				Because of https://maven.apache.org/guides/mini/guide-configuring-plugins.html#Using_the_reporting_Tag_VS_build_Tag
				We must add revapi plugin to build section such that revapi report can't pick up it's API analyser dependency via pluginManagement
				
				Also issue with PiTest report failing as can't find report in pom packaged module
				
				JavaDoc used in release and site, want to share the UML doclet
			-->
			<id>report</id>
			<activation>
				<activeByDefault>false</activeByDefault>
			</activation>

			<properties>
				<earcam.profile.report>true</earcam.profile.report>
			</properties>

			<build>
				<plugins>
					<plugin>
						<groupId>org.revapi</groupId>
						<artifactId>revapi-maven-plugin</artifactId>
					</plugin>

					<plugin>
						<groupId>org.pitest</groupId>
						<artifactId>pitest-maven</artifactId>
					</plugin>

					<plugin>
						<groupId>org.apache.maven.plugins</groupId>
						<artifactId>maven-javadoc-plugin</artifactId>
					</plugin>
				</plugins>
			</build>
		</profile>

		<profile>
			<id>site</id>
			<activation>
				<activeByDefault>false</activeByDefault>
			</activation>

			<properties>
				<earcam.profile.site>true</earcam.profile.site>
			</properties>

			<build>
				<defaultGoal>site</defaultGoal>
				<plugins>
					<plugin>
						<groupId>org.apache.maven.plugins</groupId>
						<artifactId>maven-enforcer-plugin</artifactId>
						<executions>
							<execution>
								<id>enforce-active-profiles</id>
								<goals>
									<goal>enforce</goal>
								</goals>
								<configuration>
									<rules>
										<requireProperty>
											<property>earcam.profile.analyse</property>
											<regex>^true$</regex>
											<message>Profile "analyse" must be active</message>
										</requireProperty>

										<requireProperty>
											<property>earcam.profile.report</property>
											<regex>^true$</regex>
											<message>Profile "report" must be active</message>
										</requireProperty>
									</rules>
									<fail>true</fail>
								</configuration>
							</execution>
						</executions>
					</plugin>

					<plugin>
						<groupId>org.apache.maven.plugins</groupId>
						<artifactId>maven-site-plugin</artifactId>
					</plugin>

					<plugin>
						<groupId>org.apache.maven.plugins</groupId>
						<artifactId>maven-doap-plugin</artifactId>
						<!-- ISSUE: doesn't correctly report multiple licenses -->
						<version>1.2</version>
						<executions>
							<execution>
								<id>site</id>
								<phase>site</phase>
								<goals>
									<goal>generate</goal>
								</goals>
							</execution>
						</executions>
					</plugin>
				</plugins>
			</build>
		</profile>

		<profile>
			<id>publish-site</id>
			<activation>
				<activeByDefault>false</activeByDefault>
			</activation>

			<build>
				<defaultGoal>site:deploy</defaultGoal>
				
				<plugins>
					<plugin>
						<groupId>org.apache.maven.plugins</groupId>
						<artifactId>maven-site-plugin</artifactId>
						<configuration>
							<skipDeploy>true</skipDeploy><!-- this skips the site-deploy lifecycle phase, rather than just the plugin's execution -->
						</configuration>
					</plugin>
					
					<plugin>
						<groupId>org.apache.maven.plugins</groupId>
						<artifactId>maven-enforcer-plugin</artifactId>
						<executions>
							<execution>
								<id>enforce-active-profiles</id>
								<goals>
									<goal>enforce</goal>
								</goals>
								<configuration>
									<rules>
										<requireProperty>
											<property>earcam.profile.site</property>
											<regex>^true$</regex>
											<message>Profile "site" must be active</message>
										</requireProperty>
									</rules>
									<fail>true</fail>
								</configuration>
							</execution>
						</executions>
					</plugin>
				</plugins>
			</build>
		</profile>

		<profile>
			<id>sonar</id>
			<activation>
				<activeByDefault>false</activeByDefault>
			</activation>
			
			<properties>
				<sonar.sourceEncoding>${project.build.sourceEncoding}</sonar.sourceEncoding>
				<sonar.pitest.mode>reuseReport</sonar.pitest.mode>
				
				<earcam.profile.sonar>true</earcam.profile.sonar>
			</properties>

			<build>
				<defaultGoal>clean install org.sonarsource.scanner.maven:sonar-maven-plugin:LATEST:sonar</defaultGoal>
				
				<plugins>
					<plugin>
						<groupId>org.apache.maven.plugins</groupId>
						<artifactId>maven-enforcer-plugin</artifactId>
						<executions>
							<execution>
								<id>enforce-active-profiles</id>
								<goals>
									<goal>enforce</goal>
								</goals>
								<configuration>
									<rules>
										<requireProperty>
											<property>earcam.profile.analyse</property>
											<regex>^true$</regex>
											<message>Profile "analyse" must be active</message>
										</requireProperty>
									</rules>
									<fail>true</fail>
								</configuration>
							</execution>
						</executions>
					</plugin>
				</plugins>
			</build>
		</profile>

		<profile>
			<id>analyse</id>
			<activation>
				<activeByDefault>false</activeByDefault>
			</activation>
			
			<properties>
				<earcam.profile.analyse>true</earcam.profile.analyse>
			</properties>

			<build>
				<plugins>
					<plugin>
						<groupId>org.jacoco</groupId>
						<artifactId>jacoco-maven-plugin</artifactId>
						<executions>
							<execution>
								<id>prepare-agent-unit</id>
								<goals>
									<goal>prepare-agent</goal>
								</goals>
								<configuration>
									<propertyName>surefire.argLine</propertyName>
								</configuration>
							</execution>
							
							<execution>
								<id>prepare-agent-integration</id>
								<goals>
									<goal>prepare-agent-integration</goal>
								</goals>
								<phase>pre-integration-test</phase>
								<configuration>
									<propertyName>failsafe.argLine</propertyName>
								</configuration>
							</execution>
						</executions>
					</plugin>

					<plugin>
						<groupId>org.apache.maven.plugins</groupId>
						<artifactId>maven-surefire-plugin</artifactId>
						<configuration>
							<argLine>${surefire.argLine} -XX:MaxPermSize=512m</argLine>
						</configuration>
					</plugin>					
					
					<plugin>
						<groupId>org.apache.maven.plugins</groupId>
						<artifactId>maven-failsafe-plugin</artifactId>
						<configuration>
							<argLine>${failsafe.argLine} -XX:MaxPermSize=512m</argLine>
						</configuration>
					</plugin>

					<plugin>
						<groupId>org.pitest</groupId>
						<artifactId>pitest-maven</artifactId>
						<executions>
							<execution>
								<goals>
									<goal>mutationCoverage</goal>
								</goals>
							</execution>
						</executions>
					</plugin>
				</plugins>
			</build>			
		</profile>	

		<profile>
			<id>distribute</id>
			<!-- requires GPG keypass, this should be in settings.xml in a profile called "signature" -->
			<activation>
				<activeByDefault>false</activeByDefault>
			</activation>

			<properties>
				<sonar.sourceEncoding>${project.build.sourceEncoding}</sonar.sourceEncoding>
				<sonar.pitest.mode>reuseReport</sonar.pitest.mode>

				<earcam.profile.distribute>true</earcam.profile.distribute>
			</properties>

			<build>
				<plugins>
					<plugin>
						<groupId>org.apache.maven.plugins</groupId>
						<artifactId>maven-enforcer-plugin</artifactId>
						<executions>
							<execution>
								<id>enforce-active-profiles</id>
								<goals>
									<goal>enforce</goal>
								</goals>
								<configuration>
									<rules>
										<requireProperty>
											<property>earcam.profile.signature</property>
											<regex>^true$</regex>
											<message>Profile "signature" must be active</message>
										</requireProperty>
									</rules>
									<fail>true</fail>
								</configuration>
							</execution>
						</executions>
					</plugin>

					<plugin>
						<groupId>org.apache.maven.plugins</groupId>
						<artifactId>maven-gpg-plugin</artifactId>
						<executions>
							<execution>
								<id>sign-artifacts</id>
								<phase>verify</phase>
								<goals>
									<goal>sign</goal>
								</goals>
							</execution>
						</executions>
					</plugin>
					
					<plugin>
						<groupId>org.apache.maven.plugins</groupId>
						<artifactId>maven-source-plugin</artifactId>
						<executions>
							<execution>
								<id>attach-sources</id>
								<goals>
									<goal>jar</goal>
									<goal>test-jar</goal>
								</goals>
							</execution>
						</executions>
					</plugin>

					<plugin>
						<groupId>org.apache.maven.plugins</groupId>
						<artifactId>maven-javadoc-plugin</artifactId>
						<executions>
							<execution>
								<goals>
									<goal>jar</goal>
									<goal>test-jar</goal>
								</goals>
							</execution>
						</executions>
					</plugin>
				</plugins>
			</build>
		</profile>	

		<profile>
			<id>release-scm</id>
			<activation>
				<activeByDefault>false</activeByDefault>
			</activation>
			<build>
				<plugins>
					<plugin>
						<groupId>org.apache.maven.plugins</groupId>
						<artifactId>maven-enforcer-plugin</artifactId>
						<inherited>true</inherited>
						<executions>
							<execution>
								<id>enforce-no-snapshots</id>
								<goals>
									<goal>enforce</goal>
								</goals>
								<configuration>
									<rules>
										<requireReleaseDeps>
											<message>Snapshots dependencies NOT permitted for release</message>
										</requireReleaseDeps>
										<requireReleaseVersion>
											<message>Snapshot version for project NOT permitted for release</message>
										</requireReleaseVersion>
									</rules>
									<fail>true</fail>
								</configuration>
							</execution>
						</executions>
					</plugin>

					<plugin>
						<groupId>org.apache.maven.plugins</groupId>
						<artifactId>maven-release-plugin</artifactId>
						<configuration>
							<username>earcam</username>
							<tagNameFormat>v@{project.version}</tagNameFormat>
							<resume>false</resume>
							<pushChanges>false</pushChanges>
							<autoVersionSubmodules>true</autoVersionSubmodules> <!-- TODO revapi -->
							<autoVersionSubmodules>true</autoVersionSubmodules>
						</configuration>
					</plugin>
				</plugins>
			</build>
		</profile>	

		<profile>
			<id>publish</id>
			<!-- requires Sonatype credentials, this should be in settings.xml in server section -->
			<activation>
				<activeByDefault>false</activeByDefault>
			</activation>
			<build>
				<defaultGoal>deploy</defaultGoal>
			
				<plugins>
					<plugin>
						<groupId>org.apache.maven.plugins</groupId>
						<artifactId>maven-enforcer-plugin</artifactId>
						<executions>
							<execution>
								<id>enforce-active-profiles</id>
								<goals>
									<goal>enforce</goal>
								</goals>
								<configuration>
									<rules>
										<requireProperty>
											<property>earcam.profile.distribute</property>
											<regex>^true$</regex>
											<message>Profile "distribute" must be active</message>
										</requireProperty>
									</rules>
									<fail>true</fail>
								</configuration>
							</execution>
						</executions>
					</plugin>
					
					<plugin>
						<groupId>org.sonatype.plugins</groupId>
						<artifactId>nexus-staging-maven-plugin</artifactId>
						<extensions>true</extensions>
						<configuration>
							<serverId>ossrh</serverId>
							<nexusUrl>https://oss.sonatype.org/</nexusUrl>
							<autoReleaseAfterClose>false</autoReleaseAfterClose>
						</configuration>
					</plugin>
				</plugins>
			</build>
		</profile>	
	</profiles>
</project>
