<?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.beam</groupId>
    <artifactId>beam-sdks-java-parent</artifactId>
    <version>2.3.0</version>
    <relativePath>../pom.xml</relativePath>
  </parent>

  <artifactId>beam-sdks-java-maven-archetypes-parent</artifactId>
  <packaging>pom</packaging>

  <name>Apache Beam :: SDKs :: Java :: Maven Archetypes</name>

  <modules>
    <module>starter</module>
  </modules>

  <build>
    <resources>
      <!-- use filtering for the pom.xml template (with custom delimiter, see bellow) -->
      <resource>
        <directory>src/main/resources</directory>
        <filtering>true</filtering>
        <includes>
          <include>archetype-resources/pom.xml</include>
        </includes>
      </resource>
      <!-- all of the other resources file should be used as resource but without filtering -->
      <resource>
        <directory>src/main/resources</directory>
        <filtering>false</filtering>
        <excludes>
          <exclude>archetype-resources/pom.xml</exclude>
        </excludes>
      </resource>
    </resources>

    <pluginManagement>
      <plugins>
        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-resources-plugin</artifactId>
          <configuration>
            <delimiters>
              <delimiter>@</delimiter>
            </delimiters>
            <useDefaultDelimiters>false</useDefaultDelimiters>
          </configuration>
        </plugin>
      </plugins>
    </pluginManagement>
    
    <plugins>
      <!-- Disable the Maven jar plugin because Maven archetypes
         are packaged using the Maven archetype packaging plugin. -->
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-jar-plugin</artifactId>
        <executions>
          <execution>
            <id>default-jar</id>
            <phase>none</phase>
          </execution>
          <execution>
            <id>default-test-jar</id>
            <phase>none</phase>
          </execution>
        </executions>
      </plugin>
    </plugins>
  </build>

  <profiles>
    <!--
      The builds for the example archetypes use unix scripting, so are enabled only on
      platforms that Maven considers "unix".

      The archetypes themselves are perfectly fine on all platforms (namely Windows). This is just
      the generation and installation of the jar.
    -->
    <profile>
      <id>beam-sdks-java-archetypes-examples</id>
      <activation>
        <activeByDefault>false</activeByDefault>
        <os>
          <family>unix</family>
        </os>
        <property><name>!beam.sdks.java.archetypes.examples.skip</name></property>
      </activation>
      <modules>
        <module>examples</module>
      </modules>
    </profile>
  </profiles>
</project>
