<?xml version="1.0" encoding="UTF-8"?>
<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>
  <artifactId>kohlschutter-parent-multirelease</artifactId>
  <packaging>pom</packaging>
  <parent>
    <groupId>com.kohlschutter</groupId>
    <artifactId>kohlschutter-parent</artifactId>
    <version>1.5.1</version>
    <relativePath>../pom.xml</relativePath>
  </parent>
  <name>kohlschutter-parent-multirelease</name>
  <description>Parent POM for multi-release jar projects</description>
  <properties>
    <kohlschutter.project.base.directory>${project.basedir}/..</kohlschutter.project.base.directory>
    <kohlschutter.parent.directory>${project.basedir}/..</kohlschutter.parent.directory>
    <kohlschutter.project.notice.file>${kohlschutter.parent.directory}/NOTICE</kohlschutter.project.notice.file>

    <!-- The most-recent java release this project supports (at least 9) -->
    <kohlschutter.multirelease.java.release>9</kohlschutter.multirelease.java.release>

    <!-- The Java release we should use for Java 8 (usually 8, but use any
      lower version to force compiling against something ancient, e.g., 7) -->
    <kohlschutter.multirelease.java8.release>8</kohlschutter.multirelease.java8.release>

    <kohlschutter.multirelease.jar.phase>package</kohlschutter.multirelease.jar.phase>
    <kohlschutter.singlerelease.jar.phase>none</kohlschutter.singlerelease.jar.phase>

    <maven.compiler.source>${kohlschutter.multirelease.java.release}</maven.compiler.source>
    <maven.compiler.target>${kohlschutter.multirelease.java.release}</maven.compiler.target>
  </properties>

  <build>
    <pluginManagement>
      <plugins>
        <plugin>
          <artifactId>maven-compiler-plugin</artifactId>
          <configuration>
            <release>${kohlschutter.multirelease.java.release}</release>
          </configuration>
        </plugin>
      </plugins>
    </pluginManagement>
  </build>

  <profiles>
    <profile>
      <id>multirelease</id>
      <!-- Java 8 / multi-release jar support is enabled by default, unless
        you're in Eclipse, which doesn't support compiling with multiple
        compilers -->
      <activation>
        <property>
          <name>!m2e.version</name>
        </property>
      </activation>
      <build>
        <plugins>
          <plugin>
            <artifactId>maven-compiler-plugin</artifactId>
            <executions>
              <execution>
                <id>java8-compile</id>
                <goals>
                  <goal>compile</goal>
                </goals>
                <configuration>
                  <compileSourceRoots>
                    <compileSourceRoot>${project.build.directory}/sources-java8</compileSourceRoot>
                  </compileSourceRoots>
                  <outputDirectory>${project.build.outputDirectory}/../classes-multirelease</outputDirectory>
                  <target>1.${kohlschutter.multirelease.java8.release}</target>
                  <release>${kohlschutter.multirelease.java8.release}</release>
                  <multiReleaseOutput>false</multiReleaseOutput>
                  <excludes>
                    <exclude>module-info.java</exclude>
                  </excludes>
                  <testExcludes>
                    <testExclude>**/*</testExclude>
                  </testExcludes>
                </configuration>
              </execution>
            </executions>
          </plugin>
          <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-resources-plugin</artifactId>
            <executions>
              <execution>
                <id>copy-source-files-java8</id>
                <phase>generate-sources</phase>
                <goals>
                  <goal>copy-resources</goal>
                </goals>
                <configuration>
                  <outputDirectory>${project.build.directory}/sources-java8</outputDirectory>
                  <includeEmptyDirs>true</includeEmptyDirs>
                  <resources>
                    <resource>
                      <directory>src/main/java</directory>
                      <includes>
                        <include>**</include>
                      </includes>
                    </resource>
                    <resource>
                      <!-- src/main/java8 should contain only classes that
                        override behavior of those in src/main/java -->
                      <directory>src/main/java8</directory>
                      <includes>
                        <include>**</include>
                      </includes>
                    </resource>
                  </resources>
                  <overwrite>true</overwrite>
                </configuration>
              </execution>
              <execution>
                <id>copy-default-compile-classes-to-multirelease</id>
                <phase>compile</phase>
                <goals>
                  <goal>copy-resources</goal>
                </goals>
                <configuration>
                  <outputDirectory>${project.build.outputDirectory}/../classes-multirelease/META-INF/versions/${kohlschutter.multirelease.java.release}</outputDirectory>
                  <resources>
                    <resource>
                      <directory>${project.build.outputDirectory}</directory>
                      <includes>
                        <include>**/*.class</include>
                      </includes>
                    </resource>
                  </resources>
                </configuration>
              </execution>
              <execution>
                <id>copy-default-resources-to-common-multirelease</id>
                <phase>compile</phase>
                <goals>
                  <goal>copy-resources</goal>
                </goals>
                <configuration>
                  <outputDirectory>${project.build.outputDirectory}/../classes-multirelease/</outputDirectory>
                  <resources>
                    <resource>
                      <directory>${project.build.outputDirectory}</directory>
                      <excludes>
                        <exclude>**/*.class</exclude>
                      </excludes>
                    </resource>
                  </resources>
                </configuration>
              </execution>
            </executions>
          </plugin>
          <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-jar-plugin</artifactId>
            <executions>
              <execution>
                <id>default-jar</id>
                <phase>${kohlschutter.singlerelease.jar.phase}</phase>
              </execution>
              <execution>
                <id>multirelease-jar</id>
                <goals>
                  <goal>jar</goal>
                </goals>
                <phase>${kohlschutter.multirelease.jar.phase}</phase>
                <configuration>
                  <archive>
                    <manifestEntries>
                      <Multi-Release>true</Multi-Release>
                    </manifestEntries>
                  </archive>
                  <classesDirectory>${project.build.outputDirectory}/../classes-multirelease</classesDirectory>
                </configuration>
              </execution>
            </executions>
          </plugin>
        </plugins>
      </build>
    </profile>

    <profile>
      <id>multirelease-java9</id>
      <activation>
        <property>
          <name>kohlschutter.multirelease.java.release</name>
          <value>!9</value>
        </property>
      </activation>
      <build>
        <plugins>
          <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-resources-plugin</artifactId>
            <executions>
              <execution>
                <id>copy-source-files-java9</id>
                <phase>generate-sources</phase>
                <goals>
                  <goal>copy-resources</goal>
                </goals>
                <configuration>
                  <outputDirectory>${project.build.directory}/sources-java9</outputDirectory>
                  <includeEmptyDirs>true</includeEmptyDirs>
                  <resources>
                    <resource>
                      <directory>src/main/java</directory>
                      <includes>
                        <include>**</include>
                      </includes>
                    </resource>
                    <resource>
                      <!-- src/main/java9 should contain only classes that
                        override behavior of those in src/main/java -->
                      <directory>src/main/java9</directory>
                      <includes>
                        <include>**</include>
                      </includes>
                    </resource>
                  </resources>
                  <overwrite>true</overwrite>
                </configuration>
              </execution>
            </executions>
          </plugin>
          <plugin>
            <artifactId>maven-compiler-plugin</artifactId>
            <executions>
              <execution>
                <id>java9-compile</id>
                <goals>
                  <goal>compile</goal>
                </goals>
                <configuration>
                  <outputDirectory>${project.build.outputDirectory}/../classes-multirelease/META-INF/versions/9</outputDirectory>
                  <target>9</target>
                  <release>9</release>
                  <multiReleaseOutput>false</multiReleaseOutput>
                  <compileSourceRoots>
                    <compileSourceRoot>${project.build.directory}/sources-java9</compileSourceRoot>
                  </compileSourceRoots>
                  <testExcludes>
                    <testExclude>**/*</testExclude>
                  </testExcludes>
                </configuration>
              </execution>
            </executions>
          </plugin>
        </plugins>
      </build>
    </profile>
  </profiles>
</project>
