<?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-commons</artifactId>
        <version>2.0.0-SNAPSHOT</version>
    </parent>

    <artifactId>causeway-viewer-commons-services</artifactId>
    <name>Apache Causeway Viewer - Commons Services</name>

    <properties>
        <jar-plugin.automaticModuleName>org.apache.causeway.viewer.commons.services</jar-plugin.automaticModuleName>
        <git-plugin.propertiesDir>org/apache/causeway/viewer/commons/services</git-plugin.propertiesDir>
    </properties>

    <dependencies>
    
    	<dependency>
            <groupId>org.apache.causeway.viewer</groupId>
            <artifactId>causeway-viewer-commons-model</artifactId>
        </dependency>
    
		<dependency>
            <groupId>org.apache.causeway.core</groupId>
            <artifactId>causeway-core-runtime</artifactId>
        </dependency>

		<!-- for access to /WEB-INF/ where translation files may reside -->        
        <dependency>
		    <groupId>javax.servlet</groupId>
		    <artifactId>javax.servlet-api</artifactId>
		</dependency>
		
		<!-- TESTING -->

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

    </dependencies>

</project>
