<?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/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">

	<modelVersion>4.0.0</modelVersion>
	
	<parent>
		<groupId>org.apache.juneau</groupId>
		<artifactId>juneau-microservice</artifactId>
		<version>9.0.0</version>
	</parent>

	<artifactId>juneau-my-jetty-microservice</artifactId>
	<name>juneau/microservice/my-jetty-microservice</name>
	<description>Apache Juneau Jetty Microservice Template</description>
	
	<properties>
		<juneau.version>9.0.0</juneau.version>
		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
	</properties>
	
	<dependencies>
		<dependency>
			<groupId>org.apache.juneau</groupId>
			<artifactId>juneau-microservice-jetty</artifactId>
			<version>${juneau.version}</version>
		</dependency>
	</dependencies>
	
	<build>
		<plugins>
			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-javadoc-plugin</artifactId>
				<configuration>
					<!-- Needed to prevent mvn release:prepare from blowing up. -->
					<skip>true</skip>
					<source>8</source>
				</configuration>
			</plugin>
			<plugin>
				<artifactId>maven-assembly-plugin</artifactId>
				<executions>
					<execution>
						<id>juneau-assembly</id>
						<phase>package</phase>
						<goals>
							<goal>single</goal>
						</goals>
						<configuration>
							<finalName>my-jetty-microservice-${project.version}</finalName>
							<descriptors>
								<descriptor>src/assembly/bin.xml</descriptor>
							</descriptors>
							<escapeString>\</escapeString>
						</configuration>
					</execution>
				</executions>
			</plugin>
		</plugins>
	</build>
</project>
