<!--
  ============LICENSE_START=======================================================
  ONAP : APPC
  ================================================================================
  Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
  Copyright (C) 2017 Amdocs
  ================================================================================
  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.
  ============LICENSE_END=========================================================
  ECOMP is a trademark and service mark of AT&T Intellectual Property.
  -->
<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.onap.appc</groupId>
		<artifactId>appc</artifactId>
		<version>1.3.0-SNAPSHOT</version>
	</parent>
	<artifactId>appc-outbound</artifactId>
	<packaging>pom</packaging>
	<name>Application Controller Outbound</name>
	<description>Application Controller Outbound</description>

	<properties>
		<sdnc.aai.version>${ccsdk.sli.adaptors.version}</sdnc.aai.version>
	</properties>


	<dependencyManagement>
		<dependencies>
			<dependency>
				<groupId>org.onap.ccsdk.sli.adaptors</groupId>
				<artifactId>sql-resource-provider</artifactId>
				<version>${ccsdk.sli.adaptors.version}</version>
			</dependency>

			<dependency>
				<groupId>org.onap.ccsdk.sli.adaptors</groupId>
				<artifactId>aai-service-provider</artifactId>
				<version>${sdnc.aai.version}</version>
			</dependency>

		</dependencies>
	</dependencyManagement>

	<modules>
		<module>appc-aai-client</module>
		<module>appc-network-inventory-client</module>
	</modules>

	<build>
		<pluginManagement>
			<plugins>
				<!--This plugin's configuration is used to store Eclipse m2e settings only. It has no influence on the Maven build itself.-->
				<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-checkstyle-plugin
										</artifactId>
										<versionRange>
											[2.17,)
										</versionRange>
										<goals>
											<goal>check</goal>
										</goals>
									</pluginExecutionFilter>
									<action>
										<ignore></ignore>
									</action>
								</pluginExecution>
							</pluginExecutions>
						</lifecycleMappingMetadata>
					</configuration>
				</plugin>
			</plugins>
		</pluginManagement>
	</build>
</project>
