<?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>
	</parent>

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

	<name>sdnc-oam</name>
	<description>The SDN-C OAM component contains the components needed to operate, administer and maintain the SDN-C platform.</description>
	<url>https://wiki.onap.org</url>
	<organization>
		<name>AT&amp;T</name>
	</organization>

	<modules>
		<module>platform-logic</module>
	</modules>

	<scm>
                <connection>scm:git:ssh://git@${onap.git.host}/sdnc-oam.git</connection>
                <developerConnection>scm:git:ssh://${onap.git.host}:${onap.git.port}/${onap.git.project}/sdnc-oam.git</developerConnection>
                <url>${onap.git.protocol}://${onap.git.host}/projects/${onap.git.project}/repos/sdnc-oam/browse</url>
    		<tag>HEAD</tag>
 	</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>
		</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>
	        <profile>
		  <id>docker</id>
		  <activation>
      			<activeByDefault>true</activeByDefault>
    		  </activation>
		  <modules>
			<module>installation</module>
		  </modules>
	        </profile>

	</profiles>
	<dependencies>
		<dependency>
			<groupId>org.slf4j</groupId>
			<artifactId>slf4j-api</artifactId>
			<version>1.7.25</version>
		</dependency>
	</dependencies>
</project>
