<?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.                                              *
 ***************************************************************************************************************************
-->
<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-rest</artifactId>
		<version>7.2.1</version>
	</parent>

	<artifactId>juneau-rest-client</artifactId>
	<name>Apache Juneau REST Client API</name>
	<description>REST client API</description>
	<packaging>bundle</packaging>

	<dependencies>
		<dependency>
			<groupId>org.apache.juneau</groupId>
			<artifactId>juneau-marshall</artifactId>
			<version>${project.version}</version>
		</dependency>
		<dependency>
			<groupId>org.apache.httpcomponents</groupId>
			<artifactId>httpclient</artifactId>
		</dependency>
		<dependency>
			<groupId>junit</groupId>
			<artifactId>junit</artifactId>
			<scope>test</scope>
		</dependency>
		<dependency>
			<groupId>org.apache.juneau</groupId>
			<artifactId>juneau-core-test</artifactId>
			<version>${project.version}</version>
			<type>test-jar</type>
			<scope>test</scope>
		</dependency>
		<dependency>
			<groupId>org.apache.juneau</groupId>
			<artifactId>juneau-rest-server</artifactId>
			<version>${project.version}</version>
			<scope>test</scope>
		</dependency>
		<dependency>
			<groupId>org.apache.juneau</groupId>
			<artifactId>juneau-rest-server</artifactId>
			<version>${project.version}</version>
			<type>test-jar</type>
			<scope>test</scope>
		</dependency>
		<dependency>
			<groupId>javax.servlet</groupId>
			<artifactId>javax.servlet-api</artifactId>
			<scope>test</scope>
		</dependency>
	</dependencies>

	<properties>
		<!-- Skip javadoc generation since we generate them in the aggregate pom -->
		<maven.javadoc.skip>true</maven.javadoc.skip>
		
		<maven.compiler.source>1.6</maven.compiler.source>
		<maven.compiler.target>1.6</maven.compiler.target>
	</properties>

	<build>
		<plugins>
			<plugin>
				<groupId>org.apache.felix</groupId>
				<artifactId>maven-bundle-plugin</artifactId>
				<version>3.2.0</version>
				<extensions>true</extensions>
			</plugin>
			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-source-plugin</artifactId>
				<executions>
					<execution>
						<id>attach-sources</id>
						<phase>verify</phase>
						<goals>
							<goal>jar-no-fork</goal>
						</goals>
					</execution>
				</executions>
			</plugin>
			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-surefire-plugin</artifactId>
				<configuration>
					<includes>
						<include>**/*Test.class</include>
					</includes>
				</configuration>
			</plugin>
			<plugin>
				<groupId>com.github.siom79.japicmp</groupId>
				<artifactId>japicmp-maven-plugin</artifactId>
				<version>0.13.0</version>
				<configuration>
					<oldVersion>
						<dependency>
							<groupId>org.apache.juneau</groupId>
							<artifactId>${project.artifactId}</artifactId>
							<version>${juneau.compare.version}</version>
							<type>jar</type>
						</dependency>
					</oldVersion>
					<newVersion>
						<file>
							<path>${project.build.directory}/${project.artifactId}-${project.version}.jar</path>
						</file>
					</newVersion>
					<parameter>
						<onlyModified>true</onlyModified>
						<accessModifier>public</accessModifier>
						<excludes>
						</excludes>
						<ignoreMissingClasses>true</ignoreMissingClasses>
						<onlyBinaryIncompatible>true</onlyBinaryIncompatible>
						<breakBuildOnBinaryIncompatibleModifications>true</breakBuildOnBinaryIncompatibleModifications>
						<breakBuildIfCausedByExclusion>false</breakBuildIfCausedByExclusion>
						<breakBuildBasedOnSemanticVersioning>true</breakBuildBasedOnSemanticVersioning>
						<overrideCompatibilityChangeParameters>
							<overrideCompatibilityChangeParameter>
								<binaryCompatible>true</binaryCompatible>
								<compatibilityChange>SUPERCLASS_REMOVED</compatibilityChange>
								<sourceCompatible>true</sourceCompatible>
							</overrideCompatibilityChangeParameter>
							<overrideCompatibilityChangeParameter>
								<binaryCompatible>true</binaryCompatible>
								<compatibilityChange>FIELD_REMOVED_IN_SUPERCLASS</compatibilityChange>
								<sourceCompatible>true</sourceCompatible>
							</overrideCompatibilityChangeParameter>
						</overrideCompatibilityChangeParameters>
					</parameter>
				</configuration>
				<executions>
					<execution>
						<phase>verify</phase>
						<goals>
							<goal>cmp</goal>
						</goals>
					</execution>
				</executions>
			</plugin>
		</plugins>
	</build>
</project>
