<?xml version="1.0" encoding="UTF-8"?>
<!--
 ***************************************************************************************************************************
 * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements.  See the NOTICE file *
 * distributed with this work for additional information regarding copyright ownership.  The ASF licenses this file        *
 * to you 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.                                              *
 ***************************************************************************************************************************
-->
<!--
	This project is meant to be used as a starting point for developers to use in creating their own REST microservices.
	It creates a parent REST interface on port 10000 with a single child hello-world resource.
	This POM is likewise meant to be used as a starting point for developers. It creates an uber-jar
	to run the microserice from the command line. Copy the jar as well as the .cfg file and start it
	with java -jar juneau-microservice-template-1.0.0.jar microservice.cfg
	The group/artifact/version information is meant to be overwritten by developers to match their own needs.
-->
<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/xsd/maven-4.0.0.xsd">
	
	<modelVersion>4.0.0</modelVersion>

	<groupId>org.apache.juneau.examples</groupId>
	<artifactId>juneau-examples-rest-jetty</artifactId>
	<name>Apache Juneau REST Examples</name>
	<version>${version}</version>
	<description>Sample code packaged as a microservice.</description>

	<properties>
		<encoding>UTF-8</encoding>
		<maven.compiler.source>1.8</maven.compiler.source>
		<maven.compiler.target>1.8</maven.compiler.target>
		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
		<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>

		<maven.javadoc.skip>true</maven.javadoc.skip>
		<derby.version>${derby.version}</derby.version>
		<springframework.version>${springframework.version}</springframework.version>
		<javax.inject.version>1</javax.inject.version>
		<juneau.version>${version}</juneau.version>
		<jena.version>${jena.version}</jena.version>
		<junit.version>${junit.version}</junit.version>
		<hibernate.version>${hibernate.version}</hibernate.version>
		<xml.apis.version>${xml.apis.version}</xml.apis.version>
	</properties>

	<dependencies>

		<!-- Juneau artifacts -->	
		<dependency>
			<groupId>org.apache.juneau</groupId>
			<artifactId>juneau-microservice-jetty</artifactId>
			<version>\${juneau.version}</version>
		</dependency>

		<!-- Optional RDF support -->
		<dependency>
			<groupId>org.apache.juneau</groupId>
			<artifactId>juneau-marshall-rdf</artifactId>
			<version>\${juneau.version}</version>
		</dependency>
				
		<dependency>
			<groupId>javax.inject</groupId>
			<artifactId>javax.inject</artifactId>
			<version>\${javax.inject.version}</version>
		</dependency>

		<!-- Used for JPA persistence of beans -->
		<dependency>
			<groupId>org.apache.derby</groupId>
			<artifactId>derby</artifactId>
			<version>\${derby.version}</version>
		</dependency>
		<dependency>
			<groupId>org.hibernate</groupId>
			<artifactId>hibernate-core</artifactId>
			<version>\${hibernate.version}</version>
		</dependency>
		<dependency>
			<groupId>org.hibernate</groupId>
			<artifactId>hibernate-entitymanager</artifactId>
			<version>\${hibernate.version}</version>
		</dependency>
		<dependency>
		    <groupId>xml-apis</groupId>
		    <artifactId>xml-apis</artifactId>
		    <version>\${xml.apis.version}</version>
		</dependency>
		
		<!-- Optional RDF support -->
		<dependency>
			<groupId>org.apache.jena</groupId>
			<artifactId>jena-core</artifactId>
			<version>\${jena.version}</version>
			<exclusions>
				<exclusion>
					<groupId>org.slf4j</groupId>
					<artifactId>slf4j-log4j12</artifactId>
				</exclusion>
			</exclusions>
		</dependency>
		<dependency>
			<groupId>org.apache.jena</groupId>
			<artifactId>jena-core</artifactId>
			<version>\${jena.version}</version>
		</dependency>

		<!-- Other -->		
		<dependency>
			<groupId>junit</groupId>
			<artifactId>junit</artifactId>
			<scope>test</scope>
			<version>\${junit.version}</version>
		</dependency>

	</dependencies>

	<build>
		<plugins>

			<plugin>
				<artifactId>maven-compiler-plugin</artifactId>
				<configuration>
					<source>1.8</source>
					<target>1.8</target>
				</configuration>
			</plugin>
			
			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-resources-plugin</artifactId>
       			<version>3.0.2</version>
 				<executions>
					<execution>
						<id>package-config</id>
						<phase>package</phase>
						<goals>
							<goal>copy-resources</goal>
						</goals>
						<configuration>
							<outputDirectory>target</outputDirectory>
							<resources>
								<resource>
									<directory>.</directory>
									<includes>examples.cfg</includes>
								</resource>
							</resources>
						</configuration>
					</execution>
				</executions>
			</plugin>

			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-jar-plugin</artifactId>
				<configuration>
					<archive>
						<manifest>
							<mainClass>org.apache.juneau.examples.rest.jetty.App
							</mainClass>
						</manifest>
					</archive>
				</configuration>
			</plugin>

			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-shade-plugin</artifactId>
				<version>3.0.0</version>
				<configuration>
					<createDependencyReducedPom>false</createDependencyReducedPom>
				</configuration>
				<executions>
					<execution>
						<phase>package</phase>
						<goals>
							<goal>shade</goal>
						</goals>
						<configuration>
							<filters>
								<filter>
									<artifact>*:*</artifact>
									<excludes>
										<exclude>META-INF/*.SF</exclude>
										<exclude>META-INF/*.RSA</exclude>
										<exclude>META-INF/*.INF</exclude> <!-- This one may not be required -->
									</excludes>
								</filter>
							</filters>
						</configuration>
					</execution>
				</executions>
			</plugin>

		</plugins>
	</build>
	
</project>
