<?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/maven-v4_0_0.xsd">
	<modelVersion>4.0.0</modelVersion>

	<parent>
		<groupId>org.apache.causeway.regressiontests</groupId>
		<artifactId>causeway-regressiontests</artifactId>
		<version>2.0.0-SNAPSHOT</version>
		<relativePath>../pom.xml</relativePath>
	</parent>

	<artifactId>causeway-regressiontests-stable-rest</artifactId>
	<name>Apache Causeway - Regression Tests (stable) - Rest</name>

	<properties>
        <maven.install.skip>true</maven.install.skip>
        <maven.deploy.skip>true</maven.deploy.skip>

		<jar-plugin.automaticModuleName>org.apache.causeway.regressiontests.stable.rest</jar-plugin.automaticModuleName>
		<git-plugin.propertiesDir>org/apache/causeway/regressiontests/stable-rest</git-plugin.propertiesDir>
    </properties>

	<dependencies>

		<dependency>
			<groupId>org.apache.causeway.regressiontests</groupId>
			<artifactId>causeway-regressiontests-stable</artifactId>
			<scope>test</scope>
		</dependency>

		<dependency>
			<groupId>org.apache.causeway.persistence</groupId>
			<artifactId>causeway-persistence-jdo-datanucleus</artifactId>
			<scope>test</scope>
		</dependency>

		<dependency>
			<groupId>org.apache.causeway.testing</groupId>
			<artifactId>causeway-testing-fixtures-applib</artifactId>
			<scope>test</scope>
		</dependency>

		<dependency>
			<groupId>org.apache.causeway.viewer</groupId>
			<artifactId>causeway-viewer-restfulobjects-client</artifactId>
			<scope>test</scope>
		</dependency>

		<dependency>
			<groupId>org.apache.causeway.mavendeps</groupId>
			<artifactId>causeway-mavendeps-webapp</artifactId>
			<type>pom</type>
		</dependency>
		<dependency>
			<groupId>org.apache.causeway.viewer</groupId>
			<artifactId>causeway-viewer-restfulobjects-jaxrsresteasy</artifactId>
			<scope>test</scope>
		</dependency>

		<dependency>
            <groupId>org.apache.causeway.extensions</groupId>
            <artifactId>causeway-extensions-cors-impl</artifactId>
			<scope>test</scope>
        </dependency>

	</dependencies>
</project>
