<?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.causeway.viewer</groupId>
		<artifactId>causeway-viewer-graphql</artifactId>
		<version>2.0.0</version>
	</parent>

	<artifactId>causeway-viewer-graphql-applib</artifactId>
	<name>Apache Causeway Viewer - GraphQL (Applib)</name>

	<properties>
		<jar-plugin.automaticModuleName>org.apache.causeway.viewer.graphql.applib</jar-plugin.automaticModuleName>
		<git-plugin.propertiesDir>org/apache/causeway/viewer/graphql/applib</git-plugin.propertiesDir>
	</properties>

	<dependencies>

		<dependency>
			<groupId>org.apache.causeway.core</groupId>
			<artifactId>causeway-core-metamodel</artifactId>
		</dependency>

        <dependency>
            <groupId>org.springframework.graphql</groupId>
            <artifactId>spring-graphql</artifactId>
            <exclusions>
                <exclusion>
                    <groupId>com.graphql-java</groupId>
                    <artifactId>graphql-java</artifactId>
                </exclusion>
            </exclusions>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-autoconfigure</artifactId>
        </dependency>

        <dependency>
            <!-- override spring, for security and bug-fixes -->
            <groupId>com.graphql-java</groupId>
            <artifactId>graphql-java</artifactId>
        </dependency>



        <!-- TEST DEPENDENCIES -->

		<dependency>
			<groupId>org.apache.causeway.core</groupId>
			<artifactId>causeway-core-internaltestsupport</artifactId>
			<scope>test</scope>
		</dependency>

	</dependencies>

</project>
