<?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.royale.examples</groupId>
    <artifactId>BE0013_Dividing_an_Apache_Royale_application_with_modules</artifactId>
    <version>0.9.9</version>
  </parent>

  <artifactId>JewelModule</artifactId>
  <version>0.9.9</version>
  <packaging>swf</packaging>

  <name>Apache Royale: Examples: Blog: 0013:  - JewelModule</name>

  <build>
    <plugins>
      <plugin>
        <groupId>org.apache.royale.compiler</groupId>
        <artifactId>royale-maven-plugin</artifactId>
        <extensions>true</extensions>
        <configuration>
          <mainClass>JewelModule.mxml</mainClass>
          <targets>JSRoyale</targets>
          <debug>false</debug>
          <additionalCompilerOptions>-source-map=true;-js-compiler-option=--variable_map_input_file ../../../../../MainJewelApp/target/javascript/bin/js-release/gccvars.txt;-js-compiler-option+=--property_map_input_file ../../../../../MainJewelApp/target/javascript/bin/js-release/gccprops.txt</additionalCompilerOptions>
        </configuration>
      </plugin>

      <!-- copy module files from Module target folder to Application target folder-->
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-resources-plugin</artifactId>
        <version>3.1.0</version>
        <executions>
          <!-- for js-release (copy all to 'modules' folder)-->
          <execution>
            <id>copy-resources-release</id>
            <phase>install</phase>
            <goals>
              <goal>copy-resources</goal>
            </goals>
            <configuration>
              <resources>
                <resource>
                  <directory>${project.basedir}/target/javascript/bin/js-release/</directory>
                </resource>
              </resources>
              <outputDirectory>${project.basedir}/../MainJewelApp/target/javascript/bin/js-release/modules/</outputDirectory>
            </configuration>
          </execution>
          <!-- for js-debug (copy all to js-debug but will need a next step later (check **))-->
          <execution>
            <id>copy-resources-debug</id>
            <phase>install</phase>
            <goals>
              <goal>copy-resources</goal>
            </goals>
            <configuration>
              <resources>
                <resource>
                  <directory>${project.basedir}/target/javascript/bin/js-debug/</directory>
                </resource>
              </resources>
              <outputDirectory>${project.basedir}/../MainJewelApp/target/javascript/bin/js-debug/</outputDirectory>
            </configuration>
          </execution>
        </executions>
      </plugin>

      <!-- (**) for js-debug: we need to move two files from 'target/js-debug' to 'target/js-debug/modules' since Application expect to find it there -->
      <plugin>
        <groupId>com.coderplus.maven.plugins</groupId>
        <artifactId>copy-rename-maven-plugin</artifactId>
        <version>1.0</version>
        <executions>
          <execution>
            <id>debug-move-files</id>
            <phase>install</phase>
            <goals>
              <goal>rename</goal>
            </goals>
            <configuration>
              <fileSets>
                <fileSet>
                  <sourceFile>${project.basedir}/../MainJewelApp/target/javascript/bin/js-debug/${project.artifactId}__deps.js</sourceFile>
                  <destinationFile>${project.basedir}/../MainJewelApp/target/javascript/bin/js-debug/modules/${project.artifactId}__deps.js</destinationFile>
                </fileSet>
                <fileSet>
                  <sourceFile>${project.basedir}/../MainJewelApp/target/javascript/bin/js-debug/${project.artifactId}.css</sourceFile>
                  <destinationFile>${project.basedir}/../MainJewelApp/target/javascript/bin/js-debug/modules/${project.artifactId}.css</destinationFile>
                </fileSet>
              </fileSets>
            </configuration>
          </execution>
        </executions>
      </plugin>

    </plugins>
  </build>
  
<properties><project.build.outputTimestamp>2022-03-17T08:05:21Z</project.build.outputTimestamp></properties></project>
