<?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.5.1</version>
		<relativePath/>
	</parent>

	<groupId>org.o-ran-sc.nonrtric.sdnc-a1.northbound</groupId>
	<artifactId>sdnc-a1-northbound</artifactId>
	<version>2.0.0-SNAPSHOT</version>
	<packaging>pom</packaging>

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

	<name>sdnc-a1-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>

	<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>

</project>
