<!--
 Apache CloudStack Java Client
 Copyright (C) 2016 Autonomiccs, Inc.

 Licensed to the Autonomiccs, Inc. under one
 or more contributor license agreements.  See the NOTICE file
 distributed with this work for additional information
 regarding copyright ownership. The Autonomiccs, Inc. licenses this file
 to you under the Apache License, Version 2.0 (the
 "License"); you may not use this file except in compliance
 with the License.  You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

 Unless required by applicable law or agreed to in writing,
 software distributed under the License is distributed on an
 "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 KIND, either express or implied.  See the License for the
 specific language governing permissions and limitations
 under the License.
-->
<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>

	<parent>
		<groupId>org.sonatype.oss</groupId>
		<artifactId>oss-parent</artifactId>
		<version>9</version>
	</parent>

	<groupId>br.com.autonomiccs</groupId>
	<artifactId>apache-cloudstack-java-client</artifactId>
	<version>1.0.5</version>

	<name>apache-cloudstack-java-client</name>
	<description>This project facilitates the integration of Java applications with Apache CloudStack through its API.</description>
	<url>https://github.com/Autonomiccs/apache-cloudstack-java-client</url>

	<developers>
		<developer>
			<name>Autonomiccs</name>
			<email>all@autonomiccs.com.br</email>
			<organization>Autonomiccs</organization>
			<organizationUrl>https://www.autonomiccs.com.br</organizationUrl>
		</developer>
	</developers>

	<licenses>
		<license>
			<name>Apache License, Version 2.0</name>
			<url>http://www.apache.org/licenses/LICENSE-2.0.txt</url>
			<distribution>repo</distribution>
		</license>
	</licenses>

	<scm>
		<connection>scm:git:https://github.com/Autonomiccs/apache-cloudstack-java-client.git</connection>
		<developerConnection>scm:git:git@github.com:Autonomiccs/apache-cloudstack-java-client.git</developerConnection>
		<url>https://github.com/Autonomiccs/apache-cloudstack-java-client</url>
	  <tag>HEAD</tag>
  </scm>

	<properties>
		<!-- Disable Java doc validation for Java 8 doclint. 
		It seems it complais a lot about missing @param and @returns, which we do not use so oftern. -->
		<additionalparam>-Xdoclint:none</additionalparam>
		
		<jdkVersion>1.7</jdkVersion>
		<maven.surefire.plugin.version>2.19.1</maven.surefire.plugin.version>
		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
		<org.springframework.version>3.2.12.RELEASE</org.springframework.version>
		<mavenFailsafePluginVersion>2.19.1</mavenFailsafePluginVersion>
		<!-- This format is used by SonarQube. If you need another format see "buildnumber-maven-plugin" -->
		<maven.build.timestamp.format>MM.yyyy</maven.build.timestamp.format>
		<yearMonth>${maven.build.timestamp}</yearMonth>
		<!-- ************************ -->
		<!-- Sonar/Reporting settings -->
		<!-- ************************ -->
		<!-- Sonar/Jacoco integration. Note that these properties need to be defined 
			outside the "coverage" profile because we want to be to able to execute mvn 
			sonar:sonar without passing a profile -->
		<!-- Tells Sonar to use jacoco for coverage results -->
		<sonar.projectKey>${project.artifactId}</sonar.projectKey>
		<sonar.projectName>${project.name}</sonar.projectName>

		<sonar.projectVersion>${project.version}</sonar.projectVersion>
		<sonar.language>java</sonar.language>
		<sonar.sourceEncoding>UTF-8</sonar.sourceEncoding>
		<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
		<sonar.java.coveragePlugin>jacoco</sonar.java.coveragePlugin>
		<!-- Jacoco version to use -->
		<jacoco.version>0.7.6.201602180812</jacoco.version>
		<!-- The Sonar Jacoco Listener for JUnit to extract coverage details per 
			test -->
		<sonar-jacoco-listeners.version>3.2</sonar-jacoco-listeners.version>

		<!-- Don't let Sonar execute tests. We will ask it to Maven 'sonar.dynamicAnalysis' 
			is deprecated since version 4.3 and should no longer be used. -->
		<!-- <sonar.dynamicAnalysis>reuseReports</sonar.dynamicAnalysis> -->

		<!-- The system property jacoco.outputDir needs to be override on the command 
			line with an absolute path if you want to merge results from all modules. 
			Example in a Jenkisn build where ${WORKSPACE} is defined and your project 
			in the root directory of the workspace : mvn clean install -Prun-its,coverage 
			-Djacoco.outputDir=${WORKSPACE}/target Note that unfortunately using the 
			following does not work because of http://jira.codehaus.org/browse/SONAR-3427: 
			<jacoco.outputDir>${session.executionRootDirectory}/target/</jacoco.outputDir> -->
		<jacoco.outputDir>${project.build.directory}</jacoco.outputDir>

		<!-- Jacoco output file for UTs -->
		<jacoco.out.ut.file>jacoco-ut.exec</jacoco.out.ut.file>

		<!-- Tells Sonar where the Jacoco coverage result file is located for Unit 
			Tests -->
		<sonar.jacoco.reportPath>${jacoco.outputDir}/${jacoco.out.ut.file}</sonar.jacoco.reportPath>

		<!-- Jacoco output file for ITs -->
		<jacoco.out.it.file>jacoco-it.exec</jacoco.out.it.file>
		<!-- Tells Sonar where the Jacoco coverage result file is located for Integration 
			Tests -->
		<sonar.jacoco.itReportPath>${jacoco.outputDir}/${jacoco.out.it.file}</sonar.jacoco.itReportPath>
	</properties>

	<dependencies>
		<!-- Gson -->
		<dependency>
			<groupId>com.google.code.gson</groupId>
			<artifactId>gson</artifactId>
			<version>2.7</version>
		</dependency>

		<!-- Apache commons dependencies -->
		<dependency>
			<groupId>commons-collections</groupId>
			<artifactId>commons-collections</artifactId>
			<version>3.2.2</version>
		</dependency>
		<dependency>
			<groupId>org.apache.commons</groupId>
			<artifactId>commons-lang3</artifactId>
			<version>3.4</version>
		</dependency>
		<dependency>
			<groupId>commons-codec</groupId>
			<artifactId>commons-codec</artifactId>
			<version>1.10</version>
		</dependency>
		<dependency>
			<groupId>commons-io</groupId>
			<artifactId>commons-io</artifactId>
			<version>2.5</version>
		</dependency>

		<!-- Apache HTTP components dependencies -->
		<dependency>
			<groupId>org.apache.httpcomponents</groupId>
			<artifactId>httpclient</artifactId>
			<version>4.5.2</version>
		</dependency>

		<!-- Logging dependencies -->
		<dependency>
			<groupId>org.slf4j</groupId>
			<artifactId>slf4j-api</artifactId>
			<version>1.7.7</version>
		</dependency>

		<!-- Tests dependencies -->
		<dependency>
			<groupId>junit</groupId>
			<artifactId>junit</artifactId>
			<version>4.12</version>
			<scope>test</scope>
		</dependency>
		<dependency>
			<groupId>org.mockito</groupId>
			<artifactId>mockito-core</artifactId>
			<version>1.10.8</version>
			<scope>test</scope>
		</dependency>
		<dependency>
			<groupId>org.powermock</groupId>
			<artifactId>powermock-module-junit4</artifactId>
			<version>1.6.1</version>
			<scope>test</scope>
		</dependency>
		<dependency>
			<groupId>org.powermock</groupId>
			<artifactId>powermock-api-mockito</artifactId>
			<version>1.6.1</version>
			<scope>test</scope>
		</dependency>
	</dependencies>

	<build>
		<pluginManagement>
			<plugins>
				<plugin>
					<groupId>org.apache.maven.plugins</groupId>
					<artifactId>maven-gpg-plugin</artifactId>
					<version>1.6</version>
				</plugin>
			</plugins>
		</pluginManagement>
		<plugins>
			<plugin>
				<groupId>org.apache.rat</groupId>
				<artifactId>apache-rat-plugin</artifactId>
				<version>0.11</version>
				<configuration>
					<numUnapprovedLicenses>0</numUnapprovedLicenses>
					<excludeSubProjects>false</excludeSubProjects>
					<excludes>
						<exclude>.git/**</exclude>
						<exclude>**/.classpath</exclude>
						<exclude>**/.project</exclude>
						<exclude>**/.settings/*</exclude>
						<exclude>**/target/**/*</exclude>
						<exclude>**/README.md</exclude>
						<exclude>**/CHANGELOG.md</exclude>
						<exclude>**/.github_changelog_generator</exclude>
						<exclude>**/release.properties</exclude>
					</excludes>
				</configuration>
				<executions>
					<execution>
						<phase>verify</phase>
						<goals>
							<goal>check</goal>
						</goals>
					</execution>
				</executions>
			</plugin>
			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-compiler-plugin</artifactId>
				<version>3.5.1</version>
				<configuration>
					<source>${jdkVersion}</source>
					<target>${jdkVersion}</target>
				</configuration>
			</plugin>
			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-jar-plugin</artifactId>
				<version>2.6</version>
				<configuration>
					<archive>
						<manifest>
							<addDefaultImplementationEntries>true</addDefaultImplementationEntries>
						</manifest>
					</archive>
				</configuration>
			</plugin>
			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-release-plugin</artifactId>
				<version>2.5.3</version>
				<configuration>
          			<tagNameFormat>@{project.version}</tagNameFormat>
        		</configuration>
			</plugin>
		</plugins>
	</build>

	<!-- coverage configuration -->
	<profiles>
		<profile>
			<id>coverage</id>
			<build>
				<plugins>
					<plugin>
						<groupId>org.apache.maven.plugins</groupId>
						<artifactId>maven-surefire-plugin</artifactId>
						<version>${maven.surefire.plugin.version}</version>
						<configuration>
							<argLine>${jacoco.agent.ut.arg}</argLine>
							<!-- Specific to generate mapping between tests and covered code -->
							<properties>
								<property>
									<name>listener</name>
									<value>org.sonar.java.jacoco.JUnitListener</value>
								</property>
							</properties>
							<!-- test failure ignore -->
							<testFailureIgnore>false</testFailureIgnore>
						</configuration>
					</plugin>
					<plugin>
						<groupId>org.apache.maven.plugins</groupId>
						<artifactId>maven-failsafe-plugin</artifactId>
						<version>${mavenFailsafePluginVersion}</version>
						<configuration>
							<argLine>-Xmx1024m -XX:MaxPermSize=256m ${jacoco.agent.it.arg}
							</argLine>
							<!-- Specific to generate mapping between tests and covered code -->
							<properties>
								<property>
									<name>listener</name>
									<value>org.sonar.java.jacoco.JUnitListener</value>
								</property>
							</properties>
							<!-- Let's put failsafe reports with surefire to have access to tests 
								failures/success reports in sonar -->
							<reportsDirectory>${project.build.directory}/surefire-reports
							</reportsDirectory>
						</configuration>
					</plugin>
					<plugin>
						<groupId>org.jacoco</groupId>
						<artifactId>jacoco-maven-plugin</artifactId>
						<version>${jacoco.version}</version>
						<executions>
							<execution>
								<id>instrument</id>
								<phase>process-classes</phase>
								<goals>
									<goal>instrument</goal>
								</goals>
							</execution>
							<execution>
								<id>restore</id>
								<phase>prepare-package</phase>
								<goals>
									<goal>restore-instrumented-classes</goal>
									<goal>report</goal>
								</goals>
							</execution>
							<!-- Prepares a variable, jacoco.agent.ut.arg, that contains the info 
								to be passed to the JVM hosting the code being tested. -->
							<execution>
								<id>prepare-ut-agent</id>
								<phase>process-test-classes</phase>
								<goals>
									<goal>prepare-agent</goal>
								</goals>
								<configuration>
									<destFile>${sonar.jacoco.reportPath}</destFile>
									<propertyName>jacoco.agent.ut.arg</propertyName>
									<append>true</append>
								</configuration>
							</execution>
							<!-- Prepares a variable, jacoco.agent.it.arg, that contains the info 
								to be passed to the JVM hosting the code being tested. -->
							<execution>
								<id>prepare-it-agent</id>
								<phase>pre-integration-test</phase>
								<goals>
									<goal>prepare-agent</goal>
								</goals>
								<configuration>
									<destFile>${sonar.jacoco.itReportPath}</destFile>
									<propertyName>jacoco.agent.it.arg</propertyName>
									<append>true</append>
								</configuration>
							</execution>
						</executions>
					</plugin>
				</plugins>
			</build>
			<dependencies>
				<dependency>
					<groupId>org.codehaus.sonar-plugins.java</groupId>
					<artifactId>sonar-jacoco-listeners</artifactId>
					<version>${sonar-jacoco-listeners.version}</version>
					<scope>test</scope>
				</dependency>
			</dependencies>
		</profile>
		<!-- Integraton tests -->
		<profile>
			<id>run-its</id>
			<build>
				<plugins>
					<plugin>
						<groupId>org.apache.maven.plugins</groupId>
						<artifactId>maven-failsafe-plugin</artifactId>
						<version>${mavenFailsafePluginVersion}</version>
						<executions>
							<execution>
								<id>integration-test</id>
								<phase>integration-test</phase>
								<goals>
									<goal>integration-test</goal>
								</goals>
							</execution>
							<execution>
								<id>verify</id>
								<phase>verify</phase>
								<goals>
									<goal>verify</goal>
								</goals>
							</execution>
						</executions>
					</plugin>
				</plugins>
			</build>
		</profile>
		<!-- fix to keep the JACOCO reports for sonar -->
		<profile>
			<id>sonar</id>
			<properties>
				<sonar.host.url>http://sonar.autonomiccs.com.br</sonar.host.url>
				<sonar.exclusions>**/br/com/autonomiccs/**/beans/*.java,**/br/com/autonomiccs/**/enums/*.java,**/br/com/autonomiccs/**/exceptions/*.java</sonar.exclusions>
			</properties>
			<build>
				<plugins>
					<plugin>
						<groupId>org.apache.maven.plugins</groupId>
						<artifactId>maven-surefire-plugin</artifactId>
						<version>${maven.surefire.plugin.version}</version>
						<configuration>
							<!-- disable parallel execution so that JaCoCo listener can properly 
								work -->
							<parallel>none</parallel>
							<perCoreThreadCount>false</perCoreThreadCount>
							<forkCount>1</forkCount>
						</configuration>
					</plugin>
					<plugin>
						<groupId>org.apache.maven.plugins</groupId>
						<artifactId>maven-shade-plugin</artifactId>
						<version>2.4.3</version>
						<executions>
							<execution>
								<id>shade-archive</id>
								<phase>none</phase>
							</execution>
						</executions>
					</plugin>
				</plugins>
			</build>
		</profile>
		<profile>
			<id>nexusStagingPlugin</id>
			<build>
				<plugins>
					<plugin>
						<groupId>org.sonatype.plugins</groupId>
						<artifactId>nexus-staging-maven-plugin</artifactId>
						<version>1.6.7</version>
						<extensions>true</extensions>
						<configuration>
				       		<serverId>sonatype-nexus-staging</serverId>
				        	<nexusUrl>https://oss.sonatype.org/</nexusUrl>
				        	<autoReleaseAfterClose>true</autoReleaseAfterClose>
				      	</configuration>
					</plugin>
				</plugins>
			</build>
		</profile>
	</profiles>

</project>
