<?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.incubator.extensions</groupId>
        <artifactId>causeway-extensions-commandreplay</artifactId>
        <version>2.0.0-SNAPSHOT</version>
    </parent>

    <artifactId>causeway-extensions-commandreplay-primary</artifactId>
    <name>Apache Causeway Inc - Core Command Replay for Primary</name>

    <packaging>jar</packaging>

    <description>
        A module for obtaining commands from a primary
    </description>

    <properties>
        <jar-plugin.automaticModuleName>org.apache.causeway.incubator.extensions.commandreplay.primary</jar-plugin.automaticModuleName>
        <git-plugin.propertiesDir>org/apache/causeway/incubator/extensions/core/commandreplay/primary</git-plugin.propertiesDir>
    </properties>

    <dependencies>

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

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

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

        <dependency>
            <groupId>org.apache.causeway.extensions</groupId>
            <artifactId>causeway-extensions-commandlog-applib</artifactId>
        </dependency>

    </dependencies>

</project>
