<?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">
    <parent>
        <groupId>com.milesight.beaveriot</groupId>
        <artifactId>beaver-iot-parent</artifactId>
        <version>1.0.0</version>
        <relativePath>./beaver-iot-parent/pom.xml</relativePath>
    </parent>

    <modelVersion>4.0.0</modelVersion>

    <artifactId>beaver-iot</artifactId>
    <version>1.0.0</version>
    <packaging>pom</packaging>
    <name>beaver-iot</name>
    <description>An open-source platform designed for rapid and intuitive IoT application development.</description>
    <url>https://github.com/milesight-iot/beaver-iot</url>
    <licenses>
        <license>
            <name>MIT License</name>
            <url>https://opensource.org/license/MIT</url>
        </license>
    </licenses>


    <modules>
        <module>application</module>
        <module>core</module>
        <module>services</module>
        <module>extension-components</module>
        <module>beaver-iot-parent</module>
    </modules>

    <properties>
        <maven.compiler.source>17</maven.compiler.source>
        <maven.compiler.target>17</maven.compiler.target>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>

    <build>
        <testResources>
            <testResource>
                <directory>src/test/resources</directory>
                <includes>
                    <include>**</include>
                </includes>
                <filtering>false</filtering>
            </testResource>
            <testResource>
                <directory>src/test/java</directory>
                <includes>
                    <include>**</include>
                </includes>
                <excludes>
                    <exclude>**/*.java</exclude>
                    <exclude>**/*.groovy</exclude>
                </excludes>
                <filtering>false</filtering>
            </testResource>
            <testResource>
                <directory>src/test/groovy</directory>
                <includes>
                    <include>**</include>
                </includes>
                <excludes>
                    <exclude>**/*.java</exclude>
                    <exclude>**/*.groovy</exclude>
                </excludes>
                <filtering>false</filtering>
            </testResource>
        </testResources>

        <pluginManagement>
            <plugins>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-compiler-plugin</artifactId>
                    <version>3.8.1</version>
                    <configuration>
                        <source>17</source>
                        <target>17</target>
                    </configuration>
                </plugin>
                <plugin>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-maven-plugin</artifactId>
                    <version>3.3.4</version>
                    <executions>
                        <execution>
                            <id>repackage</id>
                            <goals>
                                <goal>repackage</goal>
                            </goals>
                            <configuration>
                                <skip>${repack.skip}</skip>
                                <classifier>exec</classifier>
                                <finalName>${project.artifactId}</finalName>
                                <layout>ZIP</layout>
                                <excludeDevtools>${devtools.exclude}</excludeDevtools>
                                <excludeGroupIds>${excludeGroupIds}</excludeGroupIds>
                                <excludes>
                                    <exclude>
                                        <groupId>${excludeArtifactGroupId.1}</groupId>
                                        <artifactId>${excludeArtifactId.1}</artifactId>
                                    </exclude>
                                </excludes>
                            </configuration>
                        </execution>
                    </executions>
                </plugin>
                <!--      unit test       -->
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-surefire-plugin</artifactId>
                    <version>3.0.0-M7</version>
                    <configuration>
                        <!--suppress UnresolvedMavenProperty -->
                        <argLine>${argLine} -ea -XX:TieredStopAtLevel=1 -Xmx2048M -Xms2048m -noverify
                            -Dspring.profiles.include=${spring.profiles.active}
                        </argLine>
                        <failIfNoTests>false</failIfNoTests>
                        <failIfNoSpecifiedTests>false</failIfNoSpecifiedTests>
                        <forkCount>1</forkCount>
                        <redirectTestOutputToFile>true</redirectTestOutputToFile>
                        <includes>
                            <include>**/*Test.java</include>
                            <include>**/*Spec.java</include>
                            <include>**/*Test.groovy</include>
                            <include>**/*Spec.groovy</include>
                        </includes>
                        <reportFormat>plain</reportFormat>
                        <consoleOutputReporter>
                            <disable>${surefire.consoleOutputReporter.disable}</disable>
                        </consoleOutputReporter>
                        <statelessTestsetInfoReporter
                                implementation="org.apache.maven.plugin.surefire.extensions.junit5.JUnit5StatelessTestsetInfoTreeReporterUnicode"/>
                    </configuration>
                    <dependencies>
                        <dependency>
                            <groupId>org.apache.maven.surefire</groupId>
                            <artifactId>surefire-junit47</artifactId>
                            <version>3.0.0-M7</version>
                        </dependency>
                        <dependency>
                            <groupId>org.apache.maven.surefire</groupId>
                            <artifactId>surefire-junit-platform</artifactId>
                            <version>3.0.0-M7</version>
                        </dependency>
                        <dependency>
                            <groupId>me.fabriciorby</groupId>
                            <artifactId>maven-surefire-junit5-tree-reporter</artifactId>
                            <version>1.1.0</version>
                        </dependency>
                    </dependencies>
                </plugin>
                <plugin>
                    <groupId>org.codehaus.gmavenplus</groupId>
                    <artifactId>gmavenplus-plugin</artifactId>
                    <version>1.13.1</version>
                    <configuration>
                        <testSources>
                            <testSource>
                                <directory>${project.basedir}/src/test/java</directory>
                                <includes>
                                    <include>**/*.groovy</include>
                                </includes>
                            </testSource>
                            <testSource>
                                <directory>${project.basedir}/src/test/groovy</directory>
                                <includes>
                                    <include>**/*.groovy</include>
                                </includes>
                            </testSource>
                        </testSources>
                    </configuration>
                    <executions>
                        <execution>
                            <goals>
                                <goal>addSources</goal>
                                <goal>addTestSources</goal>
                                <goal>compile</goal>
                                <goal>compileTests</goal>
                            </goals>
                        </execution>
                    </executions>
                </plugin>
                <plugin>
                    <groupId>org.codehaus.mojo</groupId>
                    <artifactId>build-helper-maven-plugin</artifactId>
                    <executions>
                        <execution>
                            <id>add-groovy-test-source</id>
                            <phase>test</phase>
                            <goals>
                                <goal>add-test-source</goal>
                            </goals>
                            <configuration>
                                <sources>
                                    <source>${basedir}/src/test/groovy</source>
                                </sources>
                            </configuration>
                        </execution>
                    </executions>
                </plugin>
                <plugin>
                    <groupId>org.jacoco</groupId>
                    <artifactId>jacoco-maven-plugin</artifactId>
                    <version>0.8.8</version>
                    <configuration>
                        <propertyName>argLine</propertyName>
                    </configuration>
                    <executions>
                        <execution>
                            <id>jacoco-prepare-agent</id>
                            <goals>
                                <goal>prepare-agent</goal>
                            </goals>
                        </execution>
                        <execution>
                            <id>coverage-check</id>
                            <goals>
                                <goal>check</goal>
                            </goals>
                            <configuration>
                                <excludes>
                                    <exclude>**/model/**</exclude>
                                    <exclude>**/entity/**</exclude>
                                    <exclude>**/enums/**</exclude>
                                    <exclude>**/type/**</exclude>
                                    <exclude>**/*Application.*</exclude>
                                </excludes>
                                <rules>
                                    <rule>
                                        <element>CLASS</element>
                                        <limits>
                                            <limit>
                                                <counter>LINE</counter>
                                                <value>COVEREDRATIO</value>
                                                <minimum>0%</minimum>
                                            </limit>
                                        </limits>
                                    </rule>
                                </rules>
                            </configuration>
                        </execution>
                    </executions>
                </plugin>
            </plugins>
        </pluginManagement>
    </build>

</project>
