<?xml version="1.0" encoding="UTF-8"?>
<!--
 * ============LICENSE_START====================================================
 * org.onap.aaf
 * ===========================================================================
 * Copyright (c) 2017 AT&T Intellectual Property. All rights reserved.
 * ===========================================================================
 * 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====================================================
 *
-->
<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/maven-v4_0_0.xsd">
	<modelVersion>4.0.0</modelVersion>
	<parent>
		<groupId>org.onap.aaf.auth</groupId>
		<artifactId>parent</artifactId>
		<version>2.1.0-SNAPSHOT</version>
		<relativePath>../pom.xml</relativePath>
	</parent>

	<artifactId>aaf-auth-certman</artifactId>
	<name>AAF Auth Certificate Manager</name>
	<description>Certificate Manager API</description>

	<properties>
		<project.swmVersion>21</project.swmVersion>
	</properties>

	<dependencies>
		<dependency>
			<groupId>org.onap.aaf.auth</groupId>
			<artifactId>aaf-auth-core</artifactId>
		</dependency>

		<dependency>
			<groupId>org.onap.aaf.auth</groupId>
			<artifactId>aaf-auth-cass</artifactId>
		</dependency>

		<dependency>
			<groupId>org.onap.aaf.cadi</groupId>
			<artifactId>aaf-cadi-aaf</artifactId>
		</dependency>

		<dependency>
			<groupId>com.google.code.jscep</groupId>
			<artifactId>jscep</artifactId>
			<version>2.4.0</version>
		</dependency>

	</dependencies>

	<build>
		<plugins>
			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-jar-plugin</artifactId>
				<configuration>
					<includes>
						<include>**/*.class</include>
					</includes>
				</configuration>
				<version>2.3.1</version>
			</plugin>

			<!--This plugin's configuration is used to store Eclipse m2e settings 
				only. It has no influence on the Maven build itself. -->
			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-deploy-plugin</artifactId>
				<configuration>
					<skip>true</skip>
				</configuration>
			</plugin>
			<plugin>
				<groupId>org.codehaus.mojo</groupId>
				<artifactId>appassembler-maven-plugin</artifactId>
				<configuration>
					<programs>
						<program>
							<mainClass>org.onap.aaf.auth.cm.AAF_CM</mainClass>
							<name>cm</name>
							<commandLineArguments>
				                <commandLineArgument>cadi_prop_files=${project.conf_dir}/org.osaaf.cm.props</commandLineArgument>
				             </commandLineArguments>
						</program>
					</programs>
				</configuration>
			</plugin>
			
		</plugins>
	</build>


</project>
