<?xml version="1.0" encoding="UTF-8"?>
<!--
  ============LICENSE_START=======================================================
   Modifications Copyright (C) 2019 Nordix Foundation.
  ================================================================================
  Licensed 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.

  SPDX-License-Identifier: Apache-2.0
  ============LICENSE_END=========================================================
-->
<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>

	<repositories>
    		<repository>
      			<id>onap-releases</id>
          		<name>onap-releases</name>
          		<url>https://nexus.onap.org/content/repositories/releases/</url>
    		</repository>
  	</repositories>

	<parent>
		<groupId>org.onap.ccsdk.parent</groupId>
		<artifactId>odlparent-lite</artifactId>
		<version>1.4.3</version>
		<relativePath/>
	</parent>

	<groupId>org.onap.sdnc.northbound</groupId>
	<artifactId>sdnc-northbound</artifactId>
	<version>1.7.3-SNAPSHOT</version>
	<packaging>pom</packaging>

	<properties>
		<sonar-maven-plugin.version>3.7.0.1746</sonar-maven-plugin.version>
	</properties>

	<name>sdnc-northbound</name>
	<description>The SDN-C Northbound APIs repo contains code for northbound API adaptors, typically MD-SAL applications</description>
	<url>https://wiki.onap.org</url>
	<organization>
		<name>ONAP</name>
	</organization>

	<modules>
		<module>features</module>
		<module>nonrt-ric-api</module>
	</modules>

	<scm>
		<connection>scm:git:ssh://git@${onap.git.host}/sdnc-northbound.git</connection>

		<developerConnection>scm:git:ssh://${onap.git.host}:${onap.git.port}/${onap.git.project}/sdnc-northbound.git</developerConnection>
		<url>${onap.git.protocol}://${onap.git.host}/projects/${onap.git.project}/repos/sdnc-northbound/browse</url>
	</scm>
	<issueManagement>
		<system>JIRA</system>
		<url>https://jira.onap.org/</url>
	</issueManagement>
	<ciManagement>
		<system>Jenkins</system>
		<url>https://jenkins.onap.org/</url>
	</ciManagement>
	<distributionManagement>
		<site>
			<id>sdnc-javadoc</id>
			<url>dav:https://${onap.nexus.host}:${onap.nexus.port}/repository/sdn-c-javadoc/${project.artifactId}/${project.version}</url>
		</site>
	</distributionManagement>

	<build>
		<plugins>
			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-surefire-plugin</artifactId>
				<version>2.17</version>
				<configuration>
					<skipTests>false</skipTests>
				</configuration>
			</plugin>
			<!-- support sonar in multi-module project -->
            		<plugin>
                		<groupId>org.sonarsource.scanner.maven</groupId>
                		<artifactId>sonar-maven-plugin</artifactId>
                		<version>${sonar-maven-plugin.version}</version>
            		</plugin>
		</plugins>
	</build>

	<profiles>
		<profile>
			<id>blackduck</id>
			<activation>
				<property>
					<name>blackduck-scan</name>
				</property>
			</activation>
			<build>
					<plugins>
						<plugin>
							<groupId>com.blackducksoftware.integration</groupId>
							<artifactId>hub-maven-plugin</artifactId>
							<version>1.4.0</version>
							<inherited>false</inherited>
							<configuration>
								<hubProjectName>${project.name}</hubProjectName>
								<outputDirectory>${project.basedir}</outputDirectory>
							</configuration>
							<executions>
								<execution>
									<id>create-bdio-file</id>
									<phase>package</phase>
									<goals>
										<goal>createHubOutput</goal>
									</goals>
								</execution>
							</executions>
						</plugin>
					</plugins>


			</build>

		</profile>

	</profiles>
</project>
