<?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:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xmlns="http://maven.apache.org/POM/4.0.0"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <parent>
        <groupId>org.apache.meecrowave</groupId>
        <artifactId>meecrowave-examples</artifactId>
        <version>1.2.3-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>samples-servlet-vaadin-v10</artifactId>
    <name>Servlet (Vaadin - V10)</name>
    <packaging>jar</packaging>

    <properties>
        <transpilation.output>${project.build.directory}/build</transpilation.output>
        <vaadin.version>10.0.1</vaadin.version>
    </properties>

    <pluginRepositories>
        <pluginRepository>
            <id>vaadin-prereleases</id>
            <url>https://maven.vaadin.com/vaadin-prereleases</url>
        </pluginRepository>
    </pluginRepositories>

    <repositories>
        <!--Releases-->
        <repository>
            <id>vaadin-addons</id>
            <url>http://maven.vaadin.com/vaadin-addons</url>
        </repository>

        <!--Pre-Releases-->
        <repository>
            <id>vaadin-prereleases</id>
            <url>http://maven.vaadin.com/vaadin-prereleases</url>
        </repository>
    </repositories>


    <dependencyManagement>
        <dependencies>
            <!--Vaadin -->
            <dependency>
                <groupId>com.vaadin</groupId>
                <artifactId>vaadin-bom</artifactId>
                <version>${vaadin.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

    <dependencies>
        <!-- this package contains the javax APIs for CDI, JAX-RS, JSONP, JSONB and Servlet4 -->
        <dependency>
            <groupId>org.apache.meecrowave</groupId>
            <artifactId>meecrowave-specs-api</artifactId>
            <version>${meecrowave.version}</version>
        </dependency>

        <!--Vaadin -->
        <dependency>
            <groupId>com.vaadin</groupId>
            <artifactId>vaadin-core</artifactId>
        </dependency>
    </dependencies>


    <build>
        <plugins>
            <plugin>
                <!--
                    For starting meecrowave via Maven. Just run
                    $> mvn clean install meecrowave:run
                -->
                <groupId>org.apache.meecrowave</groupId>
                <artifactId>meecrowave-maven-plugin</artifactId>
                <version>${meecrowave.version}</version>
            </plugin>

            <plugin>
                <groupId>com.vaadin</groupId>
                <artifactId>vaadin-maven-plugin</artifactId>
                <version>${vaadin.version}</version>
                <executions>
                    <execution>
                        <goals>
                            <goal>copy-production-files</goal>
                            <goal>package-for-production</goal>
                        </goals>
                        <configuration>
                            <transpileOutputDirectory>${transpilation.output}</transpileOutputDirectory>
                        </configuration>
                    </execution>
                </executions>
            </plugin>

            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-war-plugin</artifactId>
                <version>3.1.0</version>
                <configuration>
                    <webResources>
                        <resource>
                            <directory>${transpilation.output}</directory>
                        </resource>
                    </webResources>
                </configuration>
            </plugin>
        </plugins>
    </build>

</project>