<?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>



    <groupId>io.openmanufacturing</groupId>
    <artifactId>sds-sdk-parent</artifactId>
    <name>SDS SDK Parent</name>
    <version>1.0.2</version>
    <packaging>pom</packaging>

    <description>OMP SDS SDK</description>
    <url>https://openmanufacturingplatform.github.io/sds-documentation/sds-developer-guide/dev-snapshot/index.html</url>
    <licenses>
        <license>
            <name>MPL-2.0</name>
            <url>https://www.mozilla.org/en-US/MPL/2.0/</url>
        </license>
    </licenses>
    <developers>
        <developer>
            <name>Semantic Data Structuring Working Group</name>
            <email>artifacts@open-manufacturing.org</email>
            <organization>Open Manufacturing Platform</organization>
            <organizationUrl>https://open-manufacturing.org</organizationUrl>
        </developer>
    </developers>
    <scm>
        <url>https://github.com/OpenManufacturingPlatform/sds-sdk</url>
    </scm>

    <modules>
        <module>core/sds-aspect-model-urn</module>
        <module>core/sds-aspect-meta-model-types</module>
        <module>core/sds-aspect-meta-model-interface</module>
        <module>core/sds-aspect-meta-model-resolver</module>
        <module>core/sds-aspect-meta-model-version-migrator</module>
        <module>core/sds-aspect-meta-model-java</module>
        <module>core/sds-aspect-model-generator</module>
        <module>core/sds-aspect-model-document-generators</module>
        <module>core/sds-aspect-model-validator</module>
        <module>core/sds-aspect-model-java-generator</module>
        <module>core/sds-aspect-model-starter</module>
        <module>core/sds-aspect-static-meta-model-java</module>
        <module>core/sds-aspect-model-resolver</module>
        <module>core/sds-aspect-model-serializer</module>
        <module>core/sds-aspect-model-java-core</module>
        <module>core/sds-aspect-model-jackson</module>
        <module>core/sds-test-aspect-models</module>
        <module>core/sds-test-resources</module>
        <module>tools/bamm-cli</module>
        <module>sds-sdk-test-report</module>
    </modules>

    <properties>
        <!-- Versions of third party dependencies -->
        <aspect-meta-model-version>1.0.0</aspect-meta-model-version>
        <assertj-vavr-version>0.1.0</assertj-vavr-version>
        <classgraph-version>4.8.29</classgraph-version>
        <commons-text-version>1.6</commons-text-version>
        <easy-random-version>4.0.0</easy-random-version>
        <google-java-format-version>1.8</google-java-format-version>
        <gradle-core-version>6.1.1</gradle-core-version>
        <graphviz-version>0.18.1</graphviz-version>
        <guava-version>30.1-jre</guava-version>
        <guice-version>3.0</guice-version>
        <javaparser-version>3.14.7</javaparser-version>
        <jcommander-version>1.72</jcommander-version>
        <jena-version>4.2.0</jena-version>
        <jqwik-version>1.2.0</jqwik-version>
        <lombok-version>1.18.20</lombok-version>
        <rgxgen-version>1.3</rgxgen-version>
        <rhino-version>1.7.10</rhino-version>
        <shacl-version>1.3.2</shacl-version>
        <spring-boot-version>2.5.5</spring-boot-version>
        <system-lambda-version>1.2.0</system-lambda-version>
        <vavr-version>0.10.3</vavr-version>
        <velocity-version>2.3</velocity-version>

        <!-- Versions of plugins -->
        <jacoco-maven-plugin-version>0.8.7</jacoco-maven-plugin-version>
        <maven-clean-plugin-version>3.1.0</maven-clean-plugin-version>
        <maven-compiler-plugin-version>3.8.1</maven-compiler-plugin-version>
        <maven-surefire-plugin-version>2.22.2</maven-surefire-plugin-version>
        <maven-surefire-report-plugin-version>2.22.2</maven-surefire-report-plugin-version>
        <cyclonedx-maven-plugin-version>1.4.1</cyclonedx-maven-plugin-version>
        <maven-scm-plugin-version>1.11.2</maven-scm-plugin-version>
        <groovy-maven-plugin-version>2.1.1</groovy-maven-plugin-version>
        <maven-site-plugin-version>3.9.1</maven-site-plugin-version>
        <maven-enforcer-plugin-version>3.0.0</maven-enforcer-plugin-version>
        <build-helper-maven-plugin-version>3.2.0</build-helper-maven-plugin-version>
        <maven-jar-plugin-version>3.2.0</maven-jar-plugin-version>
        <git-commit-id-plugin-version>4.0.5</git-commit-id-plugin-version>

        <!-- General settings -->
        <testreports.directory>test-reports</testreports.directory>
        <testreports.surefire>surefire-report</testreports.surefire>
        <skip.generated.bom>true</skip.generated.bom>
        <skip.maven.surefire.report.plugin>true</skip.maven.surefire.report.plugin>
        <skip.generate.report.css>true</skip.generate.report.css>

        <java-target-version>11</java-target-version>
        <java-source-version>11</java-source-version>

        <sonar.coverage.jacoco.xmlReportPaths>
            ${project.basedir}/../sds-sdk-test-report/target/site/jacoco-aggregate/jacoco.xml,
            ${project.basedir}/../../sds-sdk-test-report/target/site/jacoco-aggregate/jacoco.xml
        </sonar.coverage.jacoco.xmlReportPaths>
    </properties>

    <dependencyManagement>
            <!-- Internal projects -->
        <dependencies>
            <dependency>
                <groupId>io.openmanufacturing</groupId>
                <artifactId>sds-aspect-meta-model</artifactId>
                <version>${aspect-meta-model-version}</version>
            </dependency>
            <dependency>
                <groupId>io.openmanufacturing</groupId>
                <artifactId>sds-aspect-model-urn</artifactId>
                <version>${project.version}</version>
            </dependency>
            <dependency>
                <groupId>io.openmanufacturing</groupId>
                <artifactId>sds-aspect-meta-model-interface</artifactId>
                <version>${project.version}</version>
            </dependency>
            <dependency>
                <groupId>io.openmanufacturing</groupId>
                <artifactId>sds-aspect-meta-model-resolver</artifactId>
                <version>${project.version}</version>
            </dependency>
            <dependency>
                <groupId>io.openmanufacturing</groupId>
                <artifactId>sds-aspect-model-resolver</artifactId>
                <version>${project.version}</version>
            </dependency>
            <dependency>
                <groupId>io.openmanufacturing</groupId>
                <artifactId>sds-aspect-meta-model-types</artifactId>
                <version>${project.version}</version>
            </dependency>
            <dependency>
                <groupId>io.openmanufacturing</groupId>
                <artifactId>sds-aspect-meta-model-version-migrator</artifactId>
                <version>${project.version}</version>
            </dependency>
            <dependency>
                <groupId>io.openmanufacturing</groupId>
                <artifactId>sds-aspect-meta-model-java</artifactId>
                <version>${project.version}</version>
            </dependency>
            <dependency>
                <groupId>io.openmanufacturing</groupId>
                <artifactId>sds-aspect-model-generator</artifactId>
                <version>${project.version}</version>
            </dependency>
            <dependency>
                <groupId>io.openmanufacturing</groupId>
                <artifactId>sds-aspect-model-document-generators</artifactId>
                <version>${project.version}</version>
            </dependency>
            <dependency>
                <groupId>io.openmanufacturing</groupId>
                <artifactId>sds-aspect-model-validator</artifactId>
                <version>${project.version}</version>
            </dependency>
            <dependency>
                <groupId>io.openmanufacturing</groupId>
                <artifactId>sds-aspect-model-java-generator</artifactId>
                <version>${project.version}</version>
            </dependency>
            <dependency>
                <groupId>io.openmanufacturing</groupId>
                <artifactId>sds-aspect-model-starter</artifactId>
                <version>${project.version}</version>
            </dependency>
            <dependency>
                <groupId>io.openmanufacturing</groupId>
                <artifactId>sds-aspect-static-meta-model-java</artifactId>
                <version>${project.version}</version>
            </dependency>
            <dependency>
                <groupId>io.openmanufacturing</groupId>
                <artifactId>sds-aspect-model-java-core</artifactId>
                <version>${project.version}</version>
            </dependency>
            <dependency>
                <groupId>io.openmanufacturing</groupId>
                <artifactId>sds-aspect-model-serializer</artifactId>
                <version>${project.version}</version>
            </dependency>
            <dependency>
                <groupId>io.openmanufacturing</groupId>
                <artifactId>sds-aspect-model-jackson</artifactId>
                <version>${project.version}</version>
            </dependency>
            <dependency>
                <groupId>io.openmanufacturing</groupId>
                <artifactId>sds-test-aspect-models</artifactId>
                <version>${project.version}</version>
            </dependency>
            <dependency>
                <groupId>io.openmanufacturing</groupId>
                <artifactId>sds-test-resources</artifactId>
                <version>${project.version}</version>
            </dependency>
            <dependency>
                <groupId>io.openmanufacturing</groupId>
                <artifactId>bamm-cli</artifactId>
                <version>${project.version}</version>
            </dependency>

            <!-- Third party 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>com.google.guava</groupId>
                <artifactId>guava</artifactId>
                <version>${guava-version}</version>
            </dependency>
            <dependency>
                <groupId>net.jqwik</groupId>
                <artifactId>jqwik</artifactId>
                <version>${jqwik-version}</version>
            </dependency>
            <dependency>
                <groupId>org.apache.jena</groupId>
                <artifactId>jena-core</artifactId>
                <version>${jena-version}</version>
            </dependency>
            <dependency>
                <groupId>org.topbraid</groupId>
                <artifactId>shacl</artifactId>
                <version>${shacl-version}</version>
            </dependency>
            <dependency>
                <groupId>io.vavr</groupId>
                <artifactId>vavr</artifactId>
                <version>${vavr-version}</version>
            </dependency>
            <dependency>
                <groupId>org.assertj</groupId>
                <artifactId>assertj-vavr</artifactId>
                <version>${assertj-vavr-version}</version>
            </dependency>
            <dependency>
                <groupId>org.mozilla</groupId>
                <artifactId>rhino</artifactId>
                <version>${rhino-version}</version>
            </dependency>
            <dependency>
                <groupId>org.apache.velocity</groupId>
                <artifactId>velocity-engine-core</artifactId>
                <version>${velocity-version}</version>
            </dependency>
            <dependency>
                <groupId>com.google.googlejavaformat</groupId>
                <artifactId>google-java-format</artifactId>
                <version>${google-java-format-version}</version>
            </dependency>
            <dependency>
                <groupId>org.jeasy</groupId>
                <artifactId>easy-random-core</artifactId>
                <version>${easy-random-version}</version>
            </dependency>
            <dependency>
                <groupId>org.apache.jena</groupId>
                <artifactId>jena-arq</artifactId>
                <version>${jena-version}</version>
            </dependency>
            <dependency>
                <groupId>org.apache.commons</groupId>
                <artifactId>commons-text</artifactId>
                <version>${commons-text-version}</version>
            </dependency>
            <dependency>
                <groupId>guru.nidi</groupId>
                <artifactId>graphviz-java-all-j2v8</artifactId>
                <version>${graphviz-version}</version>
            </dependency>
            <dependency>
                <groupId>com.github.curious-odd-man</groupId>
                <artifactId>rgxgen</artifactId>
                <version>${rgxgen-version}</version>
            </dependency>
            <dependency>
                <groupId>com.google.inject</groupId>
                <artifactId>guice</artifactId>
                <version>${guice-version}</version>
            </dependency>
            <dependency>
                <groupId>com.github.javaparser</groupId>
                <artifactId>javaparser-symbol-solver-core</artifactId>
                <version>${javaparser-version}</version>
            </dependency>
            <dependency>
                <groupId>com.beust</groupId>
                <artifactId>jcommander</artifactId>
                <version>${jcommander-version}</version>
            </dependency>
            <dependency>
                <groupId>com.github.stefanbirkner</groupId>
                <artifactId>system-lambda</artifactId>
                <version>${system-lambda-version}</version>
            </dependency>
            <dependency>
                <groupId>io.github.classgraph</groupId>
                <artifactId>classgraph</artifactId>
                <version>${classgraph-version}</version>
            </dependency>
        </dependencies>
    </dependencyManagement>

    <build>
        <pluginManagement>
            <plugins>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-clean-plugin</artifactId>
                    <version>${maven-clean-plugin-version}</version>
                </plugin>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-enforcer-plugin</artifactId>
                    <version>${maven-enforcer-plugin-version}</version>
                </plugin>
                <plugin>
                    <groupId>org.codehaus.mojo</groupId>
                    <artifactId>build-helper-maven-plugin</artifactId>
                    <version>${build-helper-maven-plugin-version}</version>
                </plugin>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-jar-plugin</artifactId>
                    <version>${maven-jar-plugin-version}</version>
                </plugin>
                <plugin>
                    <groupId>pl.project13.maven</groupId>
                    <artifactId>git-commit-id-plugin</artifactId>
                    <version>${git-commit-id-plugin-version}</version>
                </plugin>
                <plugin>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-maven-plugin</artifactId>
                    <version>${spring-boot-version}</version>
                </plugin>
            </plugins>
        </pluginManagement>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-scm-plugin</artifactId>
                <version>${maven-scm-plugin-version}</version>
                <configuration>
                    <tag>${project.version}</tag>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-enforcer-plugin</artifactId>
                <executions>
                    <execution>
                        <id>sds-parent-enforce-groupId</id>
                        <goals>
                            <goal>enforce</goal>
                        </goals>
                        <configuration>
                            <rules>
                                <requireProperty>
                                    <property>project.groupId</property>
                                    <message>You must follow Maven naming convention and set the groupId to
                                        io.openmanufacturing or extend it!
                                    </message>
                                    <regex>io.openmanufacturing(.[a-z]+)*</regex>
                                    <regexMessage>You must follow Maven naming convention and set the groupId to
                                        'io.openmanufacturing' or an extended form, e.g. io.openmanufacturing.sds!
                                    </regexMessage>
                                </requireProperty>
                            </rules>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-surefire-plugin</artifactId>
                <version>${maven-surefire-plugin-version}</version>
                <configuration>
                    <skip>false</skip>
                    <reportsDirectory>${project.build.directory}/${testreports.surefire}</reportsDirectory>
                    <includes>
                        <include>**/*Tests.java</include>
                        <include>**/*Test.java</include>
                    </includes>
                </configuration>
            </plugin>

            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>${maven-compiler-plugin-version}</version>
                <configuration>
                    <source>${java-source-version}</source>
                    <target>${java-target-version}</target>
                    <showWarnings>true</showWarnings>
                    <showDeprecation>true</showDeprecation>
                    <annotationProcessorPaths>
                        <path>
                            <groupId>org.springframework.boot</groupId>
                            <artifactId>spring-boot-configuration-processor</artifactId>
                            <version>${spring-boot-version}</version>
                        </path>
                    </annotationProcessorPaths>
                    <compilerArgs>
                        <arg>-Xlint:all</arg>
                    </compilerArgs>
                </configuration>
            </plugin>
            <!-- jacoco plugin required for unit test coverage on SonarQube. -->
            <plugin>
                <groupId>org.jacoco</groupId>
                <artifactId>jacoco-maven-plugin</artifactId>
                <version>${jacoco-maven-plugin-version}</version>
                <executions>
                    <!-- In here the JaCoCo Agent is prepared before starting your Tests -->
                    <execution>
                        <id>default-prepare-agent</id>
                        <goals>
                            <goal>prepare-agent</goal>
                        </goals>

                        <!-- Maybe you will have to make some configurations, like setting where the jacoco.exec should be stored then you can
                           use <configuration> otherwise defaults will be used. -->
                        <configuration>
                            <destFile>${project.build.directory}/jacoco.exec</destFile>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-source-plugin</artifactId>
                <version>2.2.1</version>
                <executions>
                    <execution>
                        <id>attach-sources</id>
                        <goals>
                            <goal>jar-no-fork</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-javadoc-plugin</artifactId>
                <version>3.3.0</version>
                <executions>
                    <execution>
                        <id>attach-javadocs</id>
                        <goals>
                            <goal>jar</goal>
                        </goals>
                        <configuration>
                            <doclint>none</doclint>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-gpg-plugin</artifactId>
                <version>3.0.1</version>
                <executions>
                    <execution>
                        <id>sign-artifacts</id>
                        <phase>deploy</phase>
                        <goals>
                            <goal>sign</goal>
                        </goals>
                    </execution>
                </executions>
                <configuration>
                    <gpgArguments>
                        <arg>--pinentry-mode</arg>
                        <arg>loopback</arg>
                    </gpgArguments>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.sonatype.plugins</groupId>
                <artifactId>nexus-staging-maven-plugin</artifactId>
                <version>1.6.7</version>
                <extensions>true</extensions>
                <configuration>
                   <serverId>ossrh</serverId>
                   <nexusUrl>https://s01.oss.sonatype.org/</nexusUrl>
                   <autoReleaseAfterClose>false</autoReleaseAfterClose>
                </configuration>
            </plugin>
        </plugins>
    </build>
    <distributionManagement>
        <repository>
            <id>ossrh</id>
            <name>OSSRH</name>
            <url>https://s01.oss.sonatype.org/service/local/staging/deploy/maven2/</url>
        </repository>
    </distributionManagement>
</project>
