<?xml version="1.0" encoding="UTF-8"?>
<!--
  ~ Copyright (c) 2021 Robert Bosch Manufacturing Solutions GmbH
  ~
  ~ See the AUTHORS file(s) distributed with this work for additional
  ~ information regarding authorship.
  ~
  ~ This Source Code Form is subject to the terms of the Mozilla Public
  ~ License, v. 2.0. If a copy of the MPL was not distributed with this
  ~ file, You can obtain one at https://mozilla.org/MPL/2.0/.
  ~
  ~ SPDX-License-Identifier: MPL-2.0
  -->

<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.eclipse.esmf</groupId>
      <artifactId>esmf-parent</artifactId>
      <version>19</version>
   </parent>

   <artifactId>esmf-sdk-parent</artifactId>
   <name>ESMF SDK Parent</name>
   <version>2.10.2</version>
   <packaging>pom</packaging>

   <description>ESMF SDK</description>
   <url>https://eclipse-esmf.github.io/</url>
   <licenses>
      <license>
         <name>MPL-2.0</name>
         <url>https://www.mozilla.org/en-US/MPL/2.0/</url>
      </license>
   </licenses>
   <developers>
      <developer>
         <name>Eclipse Semantic Modeling Framework Team</name>
         <email>esmf-dev@eclipse.org</email>
         <organization>Eclipse Semantic Modeling Framework</organization>
         <organizationUrl>https://projects.eclipse.org/projects/dt.esmf</organizationUrl>
      </developer>
   </developers>
   <scm>
      <url>https://github.com/eclipse-esmf/esmf-sdk</url>
      <connection>scm:git:git://github.com:eclipse-esmf/esmf-sdk.git</connection>
      <developerConnection>scm:git:ssh://git@github.com:eclipse-esmf/esmf-sdk.git</developerConnection>
   </scm>

   <modules>
      <module>core/esmf-aspect-meta-model-interface</module>
      <module>core/esmf-aspect-meta-model-java</module>
      <module>core/esmf-aspect-model-aas-generator</module>
      <module>core/esmf-aspect-model-document-generators</module>
      <module>core/esmf-aspect-model-generator</module>
      <module>core/esmf-aspect-model-github-resolver</module>
      <module>core/esmf-aspect-model-jackson</module>
      <module>core/esmf-aspect-model-java-core</module>
      <module>core/esmf-aspect-model-java-generator</module>
      <module>core/esmf-aspect-model-starter</module>
      <module>core/esmf-aspect-model-urn</module>
      <module>core/esmf-aspect-model-validator</module>
      <module>core/esmf-aspect-static-meta-model-java</module>
      <module>core/esmf-native-support</module>
      <module>core/esmf-test-aspect-models</module>
      <module>core/esmf-test-resources</module>
      <module>tools/esmf-aspect-model-maven-plugin</module>
      <module>tools/samm-cli</module>
      <module>documentation</module>
   </modules>

   <properties>
      <!-- General settings -->
      <skip.gpg.skip>true</skip.gpg.skip>
      <build-time-sources>${project.basedir}/src-buildtime</build-time-sources>
      <generated-sources>${project.basedir}/src-gen</generated-sources>
      <relative-native-config-path>core/esmf-native-support/src-gen/main/resources/META-INF/native-image/${project.groupId}/esmf-native-support</relative-native-config-path>
      <!-- The path to the native configs as it is reachable from the submodules -->
      <native-config-path>${project.basedir}/../../${relative-native-config-path}</native-config-path>
   </properties>

   <dependencyManagement>
      <!-- Internal projects -->
      <dependencies>
         <dependency>
            <groupId>org.eclipse.esmf</groupId>
            <artifactId>esmf-aspect-meta-model-interface</artifactId>
            <version>${project.version}</version>
         </dependency>
         <dependency>
            <groupId>org.eclipse.esmf</groupId>
            <artifactId>esmf-aspect-meta-model-java</artifactId>
            <version>${project.version}</version>
         </dependency>
         <dependency>
            <groupId>org.eclipse.esmf</groupId>
            <artifactId>esmf-aspect-model-aas-generator</artifactId>
            <version>${project.version}</version>
         </dependency>
         <dependency>
            <groupId>org.eclipse.esmf</groupId>
            <artifactId>esmf-aspect-model-document-generators</artifactId>
            <version>${project.version}</version>
         </dependency>
         <dependency>
            <groupId>org.eclipse.esmf</groupId>
            <artifactId>esmf-aspect-model-generator</artifactId>
            <version>${project.version}</version>
         </dependency>
         <dependency>
            <groupId>org.eclipse.esmf</groupId>
            <artifactId>esmf-aspect-model-github-resolver</artifactId>
            <version>${project.version}</version>
         </dependency>
         <dependency>
            <groupId>org.eclipse.esmf</groupId>
            <artifactId>esmf-aspect-model-jackson</artifactId>
            <version>${project.version}</version>
         </dependency>
         <dependency>
            <groupId>org.eclipse.esmf</groupId>
            <artifactId>esmf-aspect-model-java-core</artifactId>
            <version>${project.version}</version>
         </dependency>
         <dependency>
            <groupId>org.eclipse.esmf</groupId>
            <artifactId>esmf-aspect-model-java-generator</artifactId>
            <version>${project.version}</version>
         </dependency>
         <dependency>
            <groupId>org.eclipse.esmf</groupId>
            <artifactId>esmf-aspect-model-starter</artifactId>
            <version>${project.version}</version>
         </dependency>
         <dependency>
            <groupId>org.eclipse.esmf</groupId>
            <artifactId>esmf-aspect-model-urn</artifactId>
            <version>${project.version}</version>
         </dependency>
         <dependency>
            <groupId>org.eclipse.esmf</groupId>
            <artifactId>esmf-aspect-model-validator</artifactId>
            <version>${project.version}</version>
         </dependency>
         <dependency>
            <groupId>org.eclipse.esmf</groupId>
            <artifactId>esmf-aspect-static-meta-model-java</artifactId>
            <version>${project.version}</version>
         </dependency>
         <dependency>
            <groupId>org.eclipse.esmf</groupId>
            <artifactId>esmf-native-support</artifactId>
            <version>${project.version}</version>
         </dependency>
         <dependency>
            <groupId>org.eclipse.esmf</groupId>
            <artifactId>esmf-test-aspect-models</artifactId>
            <version>${project.version}</version>
         </dependency>
         <dependency>
            <groupId>org.eclipse.esmf</groupId>
            <artifactId>esmf-test-resources</artifactId>
            <version>${project.version}</version>
         </dependency>
         <dependency>
            <groupId>org.eclipse.esmf</groupId>
            <artifactId>esmf-aspect-model-maven-plugin</artifactId>
            <version>${project.version}</version>
         </dependency>
         <dependency>
            <groupId>org.eclipse.esmf</groupId>
            <artifactId>samm-cli</artifactId>
            <version>${project.version}</version>
         </dependency>

         <!-- Third party dependencies -->
         <!-- This meta dependency imports sane versions for many dependencies -->
         <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-dependencies</artifactId>
            <version>${spring-boot-version}</version>
            <type>pom</type>
            <scope>import</scope>
         </dependency>
         <dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-to-slf4j</artifactId>
            <version>${log4j-version}</version>
         </dependency>
         <dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-api</artifactId>
            <version>${log4j-version}</version>
         </dependency>
         <dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-core</artifactId>
            <version>${log4j-version}</version>
         </dependency>
         <dependency>
            <groupId>org.twdata.maven</groupId>
            <artifactId>mojo-executor</artifactId>
            <version>${mojo-executor-version}</version>
         </dependency>
         <dependency>
            <groupId>org.graphper</groupId>
            <artifactId>graph-support-core</artifactId>
            <version>${graph-support-version}</version>
         </dependency>
      </dependencies>
   </dependencyManagement>

   <dependencies>
      <!-- Overrides due to CVEs -->
      <dependency>
         <groupId>org.apache.maven.shared</groupId>
         <artifactId>maven-shared-utils</artifactId>
         <version>[3.3.3,)</version>
      </dependency>
      <dependency>
         <groupId>commons-io</groupId>
         <artifactId>commons-io</artifactId>
         <version>[2.16.1,)</version>
      </dependency>
      <dependency>
         <groupId>org.codehaus.plexus</groupId>
         <artifactId>plexus-archiver</artifactId>
         <version>[4.8.0,)</version>
      </dependency>
   </dependencies>

   <build>
      <plugins>
         <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-enforcer-plugin</artifactId>
            <executions>
               <execution>
                  <id>esmf-enforce-graalvm</id>
                  <goals>
                     <goal>enforce</goal>
                  </goals>
                  <configuration>
                     <rules>
                        <requireProperty>
                           <property>java.vendor.version</property>
                           <message>Could not determine JDK vendor version (java.vendor.version property)</message>
                           <regex>.*GraalVM.*</regex>
                           <regexMessage>A GraalVM JDK is required to build this project</regexMessage>
                        </requireProperty>
                        <requireJavaVersion>
                           <version>21</version>
                           <message>Java 21 or newer is required to build this project</message>
                        </requireJavaVersion>
                     </rules>
                  </configuration>
               </execution>
            </executions>
         </plugin>

         <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <configuration>
               <compilerArgs>
                  <arg>-proc:full</arg>
               </compilerArgs>
               <showWarnings>false</showWarnings>
               <showDeprecation>false</showDeprecation>
            </configuration>
         </plugin>

         <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-clean-plugin</artifactId>
            <inherited>false</inherited>
            <configuration>
               <filesets>
                  <fileset>
                     <directory>${relative-native-config-path}</directory>
                  </fileset>
               </filesets>
            </configuration>
         </plugin>
      </plugins>
   </build>

   <profiles>
      <profile>
         <id>native</id>
         <build>
            <plugins>
               <plugin>
                  <groupId>org.apache.maven.plugins</groupId>
                  <artifactId>maven-surefire-plugin</artifactId>
                  <configuration>
                     <skip>false</skip>
                     <argLine>-agentlib:native-image-agent=config-merge-dir=${native-config-path}</argLine>
                  </configuration>
               </plugin>

               <plugin>
                  <groupId>org.apache.maven.plugins</groupId>
                  <artifactId>maven-clean-plugin</artifactId>
                  <inherited>false</inherited>
                  <configuration>
                     <filesets>
                        <fileset>
                           <directory>${relative-native-config-path}</directory>
                        </fileset>
                     </filesets>
                  </configuration>
               </plugin>
            </plugins>
         </build>
      </profile>
   </profiles>
</project>
