<?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.isis.core</groupId>
        <artifactId>isis-core</artifactId>
        <version>2.0.0-M8</version>
    </parent>

    <artifactId>isis-core-metamodel</artifactId>
    <name>Apache Isis Core - MetaModel</name>

    <properties>
        <jar-plugin.automaticModuleName>org.apache.isis.core.metamodel</jar-plugin.automaticModuleName>
        <git-plugin.propertiesDir>org/apache/isis/core/metamodel</git-plugin.propertiesDir>
    </properties>

    <build>
        <resources>
            <resource>
                <filtering>false</filtering>
                <directory>src/main/java</directory>
                <excludes>
                    <exclude>**/*.java</exclude>
                </excludes>
            </resource>
        </resources>
        <testResources>
            <testResource>
                <filtering>false</filtering>
                <directory>src/test/resources</directory>
            </testResource>
            <testResource>
                <filtering>false</filtering>
                <directory>src/test/java</directory>
                <includes>
                    <include>**</include>
                </includes>
                <excludes>
                    <exclude>**/*.java</exclude>
                </excludes>
            </testResource>
        </testResources>
    </build>

    <dependencies>
    
        <dependency>
            <groupId>org.apache.isis.core</groupId>
            <artifactId>isis-applib</artifactId>
        </dependency>

        <dependency>
            <groupId>org.apache.isis.core</groupId>
            <artifactId>isis-core-config</artifactId>
        </dependency>

        <dependency>
            <groupId>org.apache.isis.core</groupId>
            <artifactId>isis-core-security</artifactId>
        </dependency>

        <dependency>
            <groupId>io.swagger</groupId>
            <artifactId>swagger-core</artifactId>
            <exclusions>
            	<!-- metamodel no longer has a dependency on guava -->
            	<exclusion>
            		<groupId>com.google.guava</groupId>
            		<artifactId>guava</artifactId>
            	</exclusion>
            	<!-- already provided by JEE API -->
            	<exclusion>
            		<groupId>javax.validation</groupId>
            		<artifactId>validation-api</artifactId>
            	</exclusion>
            	<!-- provided by Spring Boot -->
            	<exclusion>
            		<groupId>org.yaml</groupId>
            		<artifactId>snakeyaml</artifactId>
            	</exclusion>
            	<exclusion>
            		<groupId>org.slf4j</groupId>
            		<artifactId>slf4j-api</artifactId>
            	</exclusion>
                <exclusion>
                    <groupId>org.apache.commons</groupId>
                    <artifactId>commons-lang3</artifactId>
                </exclusion>
            </exclusions>
        </dependency>

        <!-- TESTING -->
        
        <dependency>
            <groupId>org.apache.isis.core</groupId>
            <artifactId>isis-core-internaltestsupport</artifactId>
            <scope>test</scope>
        </dependency>

    </dependencies>


</project>
