<?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.royale.framework</groupId>
    <artifactId>royale-framework-parent</artifactId>
    <version>0.9.8</version>
  </parent>

  <groupId>org.apache.royale.examples</groupId>
  <artifactId>examples</artifactId>
  <version>0.9.8</version>
  <packaging>pom</packaging>

  <name>Apache Royale: Examples</name>

  <properties>
    <compiler.output-dir>${basedir}/target/javascript/bin/js-debug</compiler.output-dir>
    <compiler.output-dir-debug>${basedir}/target/javascript/bin/js-debug</compiler.output-dir-debug>
    <!-- In Release mode we only want to copy assets folder content to assets destination folder, the rest is managed by compiler -->
    <compiler.output-dir-release>${basedir}/target/javascript/bin/js-release</compiler.output-dir-release>
    <royale.framework.version>${project.version}</royale.framework.version>
  <project.build.outputTimestamp>2021-07-25T06:02:59Z</project.build.outputTimestamp></properties>

  <modules>
    <module>express</module>
    <module>royale</module>
    <module>mxroyale</module>
    <module>blog</module>
    <module>native</module>
    <module>node</module>
    <module>amf</module>
    <module>crux</module>
    <module>jewel</module>
    <module>examples-tests</module>
  </modules>

  <build>
    <sourceDirectory>src/main/royale</sourceDirectory>
    <pluginManagement>
      <plugins>
        <!-- Copy the resources to the compiler output directory -->
        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-resources-plugin</artifactId>
          <executions>
            <execution>
              <id>copy-resources-debug</id>
              <phase>validate</phase>
              <goals>
                <goal>copy-resources</goal>
              </goals>
              <configuration>
                <outputDirectory>${compiler.output-dir-debug}</outputDirectory>
                <resources>
                  <resource>
                    <directory>src/main/resources</directory>
                    <filtering>true</filtering>
                  </resource>
                </resources>
              </configuration>
            </execution>
            <execution>
              <id>copy-resources-release</id>
              <phase>validate</phase>
              <goals>
                <goal>copy-resources</goal>
              </goals>
              <configuration>
                <!-- Copy the assets to the assets output directory -->
                <outputDirectory>${compiler.output-dir-release}/assets</outputDirectory>
                <resources>
                  <resource>
                    <directory>src/main/resources/assets</directory>
                    <filtering>true</filtering>
                  </resource>
                </resources>
              </configuration>
            </execution>
          </executions>
        </plugin>
        <plugin>
          <groupId>org.apache.royale.compiler</groupId>
          <artifactId>royale-maven-plugin</artifactId>
          <extensions>true</extensions>
        </plugin>
        <plugin>
          <groupId>org.jboss.errai</groupId>
          <artifactId>cordova-maven-plugin</artifactId>
          <version>4.0.0.Beta3</version>
        </plugin>
      </plugins>
    </pluginManagement>

    <plugins>
      <!-- Makes it possible to run the example directly by running 'mvn tomcat7:run' -->
      <plugin>
        <groupId>org.apache.tomcat.maven</groupId>
        <artifactId>tomcat7-maven-plugin</artifactId>
        <version>2.2</version>
        <configuration>
          <ignorePackaging>true</ignorePackaging>
          <port>8081</port>
          <warSourceDirectory>${project.build.directory}/${project.artifactId}-${project.version}</warSourceDirectory>
        </configuration>
      </plugin>
    </plugins>
  </build>

  <!--
        When doing a build for release artifacts, tell the war plugin to package a different directory.
  -->
  <profiles>
    <profile>
      <id>apache-release</id>
      <properties>
        <compiler.output-dir>${basedir}/target/javascript/bin/js-release</compiler.output-dir>
      </properties>
    </profile>

    <profile>
      <id>with-ui-testsuite</id>
      <modules>
        <module>examples-integrationtests</module>
      </modules>
    </profile>

    <profile>
      <id>option-with-cordova</id>
      <build>
        <pluginManagement>
          <plugins>
            <plugin>
              <groupId>org.jboss.errai</groupId>
              <artifactId>cordova-maven-plugin</artifactId>
              <version>4.0.0.Beta3</version>
              <executions>
                <execution>
                  <id>build</id>
                  <phase>package</phase>
                  <goals>
                    <goal>build-project</goal>
                  </goals>
                </execution>
              </executions>
            </plugin>
          </plugins>
        </pluginManagement>
      </build>
    </profile>
  </profiles>

</project>
