<!--
  ============LICENSE_START====================================================
  * org.onap.aai
  * ===========================================================================
  * Copyright © 2017 AT&T Intellectual Property. All rights reserved.
  * Copyright © 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">
<parent>
		<groupId>com.att.inno</groupId>
		<artifactId>parent</artifactId>
		<version>1.2.13</version>
		<relativePath>..</relativePath>
	</parent>
	
	<name>Rosetta</name>
	<artifactId>rosetta</artifactId>
	<packaging>jar</packaging>
	<modelVersion>4.0.0</modelVersion>
	<url>https://github.com/att/AAF</url>
	<description>INNO</description>
	<licenses>
		<license>
		<name>BSD License</name>
		<url> </url>
		</license>
	</licenses>

	<developers>
		<developer>
		<name>Jonathan Gathman</name>
		<email></email>
	<organization>ATT</organization>
	<organizationUrl></organizationUrl>
		</developer>
	</developers>

	<dependencies>
		<dependency>
			<groupId>com.att.inno</groupId>
			<artifactId>env</artifactId>
			<version>${project.version}</version>
		</dependency>
		
		<!-- dependency>
			<groupId>com.att.cadi</groupId>
			<artifactId>cadi-core</artifactId>
			<scope>compile</scope>
		</dependency>
		<dependency>
			<groupId>com.att.aft</groupId>
			<artifactId>dme2</artifactId>
			<scope>provided</scope>
		</dependency-->
		
	</dependencies>

	<distributionManagement>
    		<snapshotRepository>
      			<id>ossrhdme</id>
      			<url>https://oss.sonatype.org/content/repositories/snapshots</url>
    		</snapshotRepository>
    		<repository>
      			<id>ossrhdme</id>
      			<url>https://oss.sonatype.org/service/local/staging/deploy/maven2/</url>
    		</repository>
	</distributionManagement>
	
	<scm>
		<connection>https://github.com/att/AAF.git</connection>
		<developerConnection>${project.scm.connection}</developerConnection>
		<url>http://github.com/att/AAF/tree/master</url>
	</scm>
	
	<build>
		<plugins>
			<plugin>
				<groupId>org.codehaus.mojo</groupId>
				<artifactId>jaxb2-maven-plugin</artifactId>
				<version>1.3</version>
				<executions>
					<execution>
						<goals>
							<goal>xjc</goal>
						</goals>
					</execution>
				</executions>
				<configuration>
					<schemaDirectory>src/main/xsd</schemaDirectory>
				</configuration>
			</plugin>

			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-jar-plugin</artifactId>
				<configuration>
					<outputDirectory>target</outputDirectory>
					<includes>
						<include>**/com/att/rosetta/**</include>
					</includes>
				</configuration>
			</plugin>
		<!--	<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-source-plugin</artifactId>
				<version>2.4</version>
				<configuration>
					<outputDirectory>target</outputDirectory>
					<skipSource>false</skipSource>
					<attach>false</attach>
					<forceCreation>true</forceCreation>
					<useDefaultManifestFile>true</useDefaultManifestFile>
				</configuration>
			</plugin>  -->

			<!-- plugin> <artifactId>maven-assembly-plugin</artifactId> <configuration> 
				<archive> <manifest> <mainClass>com.att.rest.Main</mainClass> </manifest> 
				</archive> <descriptorRefs> <discriptorRef>jar-with-dependencies</discriptorRef> 
				<filters> </filters> </descriptorRefs> </configuration> </plugin -->
			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-deploy-plugin</artifactId>
				<version>2.6</version>
				<configuration>
					<skip>false</skip>
				</configuration>
			</plugin>
			
			<plugin>
			<groupId>org.apache.maven.plugins</groupId>
			<artifactId>maven-javadoc-plugin</artifactId>
			<configuration>
			<failOnError>false</failOnError>
			</configuration>
			<executions>
				<execution>
					<id>attach-javadocs</id>
					<goals>
						<goal>jar</goal>
					</goals>
				</execution>
			</executions>
		</plugin> 
	   
	   
	       <plugin>
		      <groupId>org.apache.maven.plugins</groupId>
		      <artifactId>maven-source-plugin</artifactId>
		      <version>2.2.1</version>
		      <executions>
			<execution>
			  <id>attach-sources</id>
			  <goals>
			    <goal>jar-no-fork</goal>
			  </goals>
			</execution>
		      </executions>
		    </plugin>

			
		<plugin>
			<groupId>org.sonatype.plugins</groupId>
			<artifactId>nexus-staging-maven-plugin</artifactId>
			<version>1.6.7</version>
			<extensions>true</extensions>
			<configuration>
			<serverId>ossrhdme</serverId>
			<nexusUrl>https://oss.sonatype.org/</nexusUrl>
			<autoReleaseAfterClose>true</autoReleaseAfterClose>
			</configuration>
		</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.eclipse.m2e</groupId>
				<artifactId>lifecycle-mapping</artifactId>
				<version>1.0.0</version>
				<configuration>
					<lifecycleMappingMetadata>
						<pluginExecutions>
							<pluginExecution>
								<pluginExecutionFilter>
									<groupId>
										org.codehaus.mojo
									</groupId>
									<artifactId>
										jaxb2-maven-plugin
									</artifactId>
									<versionRange>
										[1.3,)
									</versionRange>
									<goals>
										<goal>xjc</goal>
									</goals>
								</pluginExecutionFilter>
								<action>
									<ignore></ignore>
								</action>
							</pluginExecution>
						</pluginExecutions>
					</lifecycleMappingMetadata>
				</configuration>
			</plugin>
		</plugins>
</build>
	
</project>
