<?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>
    <groupId>com.kfyty</groupId>
    <artifactId>loveqq-framework</artifactId>
    <version>1.1.2-java8</version>
    <packaging>pom</packaging>
    <name>loveqq-framework</name>
    <url>https://github.com/kfyty/kfyty-framework</url>
    <description>ioc/aop/jdbc/mvc/javafx framework</description>

    <developers>
        <developer>
            <id>kfyty</id>
            <name>kfyty</name>
            <url>http://www.kfyty.com</url>
            <email>kfyty725@hotmail.com</email>
        </developer>
    </developers>

    <licenses>
        <license>
            <name>GNU GENERAL PUBLIC LICENSE Version 3</name>
            <url>https://www.gnu.org/licenses/gpl-3.0.txt</url>
        </license>
    </licenses>

    <scm>
        <url>https://github.com/kfyty/kfyty-framework</url>
        <connection>https://github.com/kfyty/kfyty-framework.git</connection>
    </scm>

    <modules>
        <module>loveqq-core</module>
        <module>loveqq-boot</module>
        <module>loveqq-data</module>
        <module>loveqq-mvc</module>
        <module>loveqq-javafx</module>
        <module>loveqq-aop</module>
        <module>loveqq-cache</module>
        <module>loveqq-sdk</module>
        <module>loveqq-boot-cloud-bootstrap</module>
        <module>loveqq-boot-starter-logback</module>
        <module>loveqq-boot-starter-datasource</module>
        <module>loveqq-boot-starter-spring-tx</module>
        <module>loveqq-boot-starter-mybatis</module>
        <module>loveqq-boot-starter-validator</module>
        <module>loveqq-boot-starter-tomcat</module>
        <module>loveqq-boot-starter-redisson</module>
        <module>loveqq-boot-starter-quartz</module>
        <module>loveqq-boot-starter-xxl-job</module>
        <module>loveqq-boot-starter-uid-generator</module>
        <module>loveqq-boot-starter-dubbo</module>
        <module>loveqq-boot-starter-feign</module>
        <module>loveqq-boot-starter-config-nacos</module>
        <module>loveqq-boot-starter-discovery-nacos</module>
        <module>loveqq-boot-starter-thymeleaf</module>
        <module>loveqq-boot-starter-pagehelper</module>
        <module>loveqq-boot-starter-shiro</module>
        <module>loveqq-boot-starter-mail</module>
        <module>loveqq-boot-starter-netty</module>
        <module>loveqq-boot-starter-rocketmq</module>
        <module>loveqq-boot-starter-test</module>
    </modules>

    <properties>
        <aspectj.version>1.9.7</aspectj.version>
        <asm.version>9.6</asm.version>
        <javassist.version>3.30.2-GA</javassist.version>
        <netty.version>4.1.115.Final</netty.version>
        <reactive.streams.version>1.0.4</reactive.streams.version>
        <reactor.core.version>3.6.0</reactor.core.version>
        <reactor.netty.version>1.2.1</reactor.netty.version>
        <ognl.version>3.4.5</ognl.version>
        <jackson.version>2.16.2</jackson.version>
        <snakeyaml.version>2.2</snakeyaml.version>
        <jfinal.enjoy.version>5.1.3</jfinal.enjoy.version>
        <freemarker.version>2.3.30</freemarker.version>
        <commons.compress.version>1.21</commons.compress.version>

        <jstl.version>1.2</jstl.version>
        <servlet.api.version>5.0.0</servlet.api.version>
        <servlet.websocket.api.version>2.1.1</servlet.websocket.api.version>
        <inject.api.version>2.0.1</inject.api.version>
        <annotation.api.version>2.1.1</annotation.api.version>
        <validation.api.version>3.0.2</validation.api.version>
        <mail.api.version>2.1.3</mail.api.version>
        <glassfish.jakarta.el.version>4.0.2</glassfish.jakarta.el.version>
        <hibernate.validator.version>7.0.0.Final</hibernate.validator.version>
        <protobuf.java.version>3.23.2</protobuf.java.version>
        <java.websocket.version>1.5.3</java.websocket.version>

        <druid.version>1.2.23</druid.version>
        <hikari.version>4.0.3</hikari.version>
        <tomcat.jdbc.version>11.0.0-M15</tomcat.jdbc.version>
        <mysql.version>8.0.16</mysql.version>
        <oracle14.version>10.2.0.4.0</oracle14.version>
        <mssql.version>7.4.0.jre8</mssql.version>
        <redisson-version>3.40.2</redisson-version>
        <lettuce.version>6.1.5.RELEASE</lettuce.version>
        <mybatis.version>3.5.16</mybatis.version>

        <k-jte.version>1.0-SNAPSHOT</k-jte.version>
        <loveqq.framework.version>1.1.2-java8</loveqq.framework.version>

        <slf4j.version>2.0.13</slf4j.version>
        <ant.version>1.10.14</ant.version>
        <junit.version>5.10.3</junit.version>
        <lombok.version>1.18.30</lombok.version>

        <source.plugin.version>3.3.1</source.plugin.version>
        <javadoc.plugin.version>3.5.0</javadoc.plugin.version>
        <compiler.plugin.version>3.13.0</compiler.plugin.version>
        <jar.plugin.version>3.4.2</jar.plugin.version>
        <gpg.plugin.version>3.2.2</gpg.plugin.version>
        <central.publishing.plugin.version>0.7.0</central.publishing.plugin.version>
        <antrun.plugin.version>3.1.0</antrun.plugin.version>
        <os.maven.version>1.5.0.Final</os.maven.version>
        <smart.doc.maven.version>3.0.5</smart.doc.maven.version>
        <protobuf.maven.version>0.5.1</protobuf.maven.version>
        <dependency.plugin.version>3.7.1</dependency.plugin.version>
        <surefire.plugin.version>3.3.1</surefire.plugin.version>

        <maven.source.version>8</maven.source.version>
        <maven.target.version>8</maven.target.version>
        <smart-doc-config>./src/main/resources/smart-doc.json</smart-doc-config>

        <boot-lib-output>boot-lib</boot-lib-output>
        <boot-main-class>com.kfyty.loveqq.framework.core.support.BootLauncher</boot-main-class>
        <boot-start-class></boot-start-class>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-api</artifactId>
            <version>${slf4j.version}</version>
        </dependency>

        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-simple</artifactId>
            <version>${slf4j.version}</version>
            <scope>test</scope>
        </dependency>

        <dependency>
            <groupId>org.junit.jupiter</groupId>
            <artifactId>junit-jupiter</artifactId>
            <version>${junit.version}</version>
            <scope>test</scope>
        </dependency>

        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>${lombok.version}</version>
            <scope>provided</scope>
        </dependency>
    </dependencies>

    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.ow2.asm</groupId>
                <artifactId>asm</artifactId>
                <version>${asm.version}</version>
            </dependency>

            <dependency>
                <groupId>org.aspectj</groupId>
                <artifactId>aspectjweaver</artifactId>
                <version>${aspectj.version}</version>
            </dependency>

            <dependency>
                <groupId>org.javassist</groupId>
                <artifactId>javassist</artifactId>
                <version>${javassist.version}</version>
            </dependency>

            <dependency>
                <groupId>ognl</groupId>
                <artifactId>ognl</artifactId>
                <version>${ognl.version}</version>
            </dependency>

            <dependency>
                <groupId>io.netty</groupId>
                <artifactId>netty-buffer</artifactId>
                <version>${netty.version}</version>
            </dependency>

            <dependency>
                <groupId>io.projectreactor</groupId>
                <artifactId>reactor-core</artifactId>
                <version>${reactor.core.version}</version>
            </dependency>

            <dependency>
                <groupId>io.projectreactor.netty</groupId>
                <artifactId>reactor-netty</artifactId>
                <version>${reactor.netty.version}</version>
            </dependency>

            <dependency>
                <groupId>com.fasterxml.jackson.core</groupId>
                <artifactId>jackson-databind</artifactId>
                <version>${jackson.version}</version>
            </dependency>

            <dependency>
                <groupId>com.fasterxml.jackson.datatype</groupId>
                <artifactId>jackson-datatype-jsr310</artifactId>
                <version>${jackson.version}</version>
            </dependency>

            <dependency>
                <groupId>com.fasterxml.jackson.dataformat</groupId>
                <artifactId>jackson-dataformat-xml</artifactId>
                <version>${jackson.version}</version>
            </dependency>

            <dependency>
                <groupId>org.yaml</groupId>
                <artifactId>snakeyaml</artifactId>
                <version>${snakeyaml.version}</version>
            </dependency>

            <dependency>
                <groupId>com.jfinal</groupId>
                <artifactId>enjoy</artifactId>
                <version>${jfinal.enjoy.version}</version>
            </dependency>

            <dependency>
                <groupId>org.freemarker</groupId>
                <artifactId>freemarker</artifactId>
                <version>${freemarker.version}</version>
            </dependency>

            <dependency>
                <groupId>org.apache.commons</groupId>
                <artifactId>commons-compress</artifactId>
                <version>${commons.compress.version}</version>
            </dependency>

            <dependency>
                <groupId>jakarta.annotation</groupId>
                <artifactId>jakarta.annotation-api</artifactId>
                <version>${annotation.api.version}</version>
            </dependency>

            <dependency>
                <groupId>jakarta.inject</groupId>
                <artifactId>jakarta.inject-api</artifactId>
                <version>${inject.api.version}</version>
            </dependency>

            <dependency>
                <groupId>jakarta.validation</groupId>
                <artifactId>jakarta.validation-api</artifactId>
                <version>${validation.api.version}</version>
            </dependency>

            <dependency>
                <groupId>jakarta.mail</groupId>
                <artifactId>jakarta.mail-api</artifactId>
                <version>${mail.api.version}</version>
            </dependency>

            <dependency>
                <groupId>org.glassfish</groupId>
                <artifactId>jakarta.el</artifactId>
                <version>${glassfish.jakarta.el.version}</version>
            </dependency>

            <dependency>
                <groupId>org.hibernate.validator</groupId>
                <artifactId>hibernate-validator</artifactId>
                <version>${hibernate.validator.version}</version>
            </dependency>

            <dependency>
                <groupId>javax.servlet</groupId>
                <artifactId>jstl</artifactId>
                <version>${jstl.version}</version>
            </dependency>

            <dependency>
                <groupId>jakarta.servlet</groupId>
                <artifactId>jakarta.servlet-api</artifactId>
                <version>${servlet.api.version}</version>
            </dependency>

            <dependency>
                <groupId>jakarta.websocket</groupId>
                <artifactId>jakarta.websocket-api</artifactId>
                <version>${servlet.websocket.api.version}</version>
            </dependency>

            <dependency>
                <groupId>jakarta.websocket</groupId>
                <artifactId>jakarta.websocket-client-api</artifactId>
                <version>${servlet.websocket.api.version}</version>
            </dependency>

            <dependency>
                <groupId>com.alibaba</groupId>
                <artifactId>druid</artifactId>
                <version>${druid.version}</version>
            </dependency>

            <dependency>
                <groupId>com.zaxxer</groupId>
                <artifactId>HikariCP</artifactId>
                <version>${hikari.version}</version>
            </dependency>

            <dependency>
                <groupId>org.apache.tomcat</groupId>
                <artifactId>tomcat-jdbc</artifactId>
                <version>${tomcat.jdbc.version}</version>
            </dependency>

            <dependency>
                <groupId>mysql</groupId>
                <artifactId>mysql-connector-java</artifactId>
                <version>${mysql.version}</version>
            </dependency>

            <dependency>
                <groupId>com.oracle</groupId>
                <artifactId>ojdbc14</artifactId>
                <version>${oracle14.version}</version>
            </dependency>

            <dependency>
                <groupId>com.microsoft.sqlserver</groupId>
                <artifactId>mssql-jdbc</artifactId>
                <version>${mssql.version}</version>
            </dependency>

            <dependency>
                <groupId>org.redisson</groupId>
                <artifactId>redisson</artifactId>
                <version>${redisson-version}</version>
            </dependency>

            <dependency>
                <groupId>io.lettuce</groupId>
                <artifactId>lettuce-core</artifactId>
                <version>${lettuce.version}</version>
            </dependency>

            <dependency>
                <groupId>org.mybatis</groupId>
                <artifactId>mybatis</artifactId>
                <version>${mybatis.version}</version>
            </dependency>

            <dependency>
                <groupId>com.google.protobuf</groupId>
                <artifactId>protobuf-java</artifactId>
                <version>${protobuf.java.version}</version>
            </dependency>

            <dependency>
                <groupId>org.java-websocket</groupId>
                <artifactId>Java-WebSocket</artifactId>
                <version>${java.websocket.version}</version>
            </dependency>

            <!-- jsp 模板引擎：https://github.com/kfyty/k-jte.git -->
            <dependency>
                <groupId>com.kfyty</groupId>
                <artifactId>k-jte</artifactId>
                <version>${k-jte.version}</version>
            </dependency>
        </dependencies>
    </dependencyManagement>

    <build>
        <!-- 打包资源文件，默认的配置无法打包 webapp -->
        <resources>
            <resource>
                <directory>src/main/resources</directory>
            </resource>
            <resource>
                <directory>src/main/webapp</directory>
            </resource>
        </resources>

        <extensions>
            <extension>
                <groupId>kr.motd.maven</groupId>
                <artifactId>os-maven-plugin</artifactId>
                <version>${os.maven.version}</version>
            </extension>
        </extensions>

        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-source-plugin</artifactId>
                <version>${source.plugin.version}</version>
                <executions>
                    <execution>
                        <id>attach-sources</id>
                        <goals>
                            <goal>jar</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>

            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>${compiler.plugin.version}</version>
                <configuration>
                    <encoding>UTF-8</encoding>
                    <source>${maven.source.version}</source>
                    <target>${maven.target.version}</target>
                    <parameters>true</parameters>
                </configuration>
            </plugin>

            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-dependency-plugin</artifactId>
                <version>${dependency.plugin.version}</version>
                <executions>
                    <execution>
                        <id>copy-runtime-dependencies</id>
                        <phase>package</phase>
                        <goals>
                            <goal>copy-dependencies</goal>
                        </goals>
                        <configuration>
                            <includeScope>runtime</includeScope>
                            <outputDirectory>${project.build.directory}/${boot-lib-output}</outputDirectory>
                        </configuration>
                    </execution>
                    <execution>
                        <id>copy-system-dependencies</id>
                        <phase>package</phase>
                        <goals>
                            <goal>copy-dependencies</goal>
                        </goals>
                        <configuration>
                            <includeScope>system</includeScope>
                            <outputDirectory>${project.build.directory}/${boot-lib-output}</outputDirectory>
                        </configuration>
                    </execution>
                </executions>
            </plugin>

            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-surefire-plugin</artifactId>
                <version>${surefire.plugin.version}</version>
                <configuration>
                    <!-- 复用 forks，会导致类加载器错误，从而导致单元测试失败 -->
                    <forkCount>1</forkCount>
                    <reuseForks>false</reuseForks>
                    <argLine>
                        --add-opens=java.base/java.lang=ALL-UNNAMED
                        --add-opens=java.base/java.io=ALL-UNNAMED
                        --add-opens=java.base/java.nio=ALL-UNNAMED
                        --add-opens=java.base/java.util=ALL-UNNAMED
                        --add-opens=java.base/java.lang.reflect=ALL-UNNAMED
                        --add-opens=java.base/sun.reflect.annotation=ALL-UNNAMED
                        --add-opens=java.base/jdk.internal.reflect=ALL-UNNAMED
                        --add-opens=java.rmi/java.rmi=ALL-UNNAMED
                        --add-opens=java.rmi/sun.rmi.transport=ALL-UNNAMED
                        --add-opens=java.rmi/sun.rmi.transport.tcp=ALL-UNNAMED
                    </argLine>
                </configuration>
            </plugin>
        </plugins>

        <pluginManagement>
            <plugins>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-antrun-plugin</artifactId>
                    <version>${antrun.plugin.version}</version>
                    <executions>
                        <execution>
                            <phase>package</phase>
                            <goals>
                                <goal>run</goal>
                            </goals>
                            <configuration>
                                <target>
                                    <java classname="com.kfyty.loveqq.framework.core.lang.task.BuildJarIndexAntTask" classpathref="maven.compile.classpath">
                                        <arg value="-OUTPUT_DIRECTORY=${project.build.directory}" />
                                        <arg value="-OUTPUT_JAR=${project.build.finalName}.jar" />
                                        <arg value="-OUTPUT_DEFAULT_JAR=${project.artifactId}-${project.version}.jar" />
                                    </java>
                                </target>
                            </configuration>
                        </execution>
                    </executions>

                    <dependencies>
                        <dependency>
                            <groupId>org.apache.ant</groupId>
                            <artifactId>ant</artifactId>
                            <version>${ant.version}</version>
                        </dependency>
                    </dependencies>
                </plugin>

                <plugin>
                    <groupId>com.ly.smart-doc</groupId>
                    <artifactId>smart-doc-maven-plugin</artifactId>
                    <version>${smart.doc.maven.version}</version>
                    <configuration>
                        <configFile>${smart-doc-config}</configFile>
                    </configuration>
                </plugin>

                <plugin>
                    <groupId>org.xolstice.maven.plugins</groupId>
                    <artifactId>protobuf-maven-plugin</artifactId>
                    <version>${protobuf.maven.version}</version>
                    <extensions>true</extensions>
                    <configuration>
                        <protocArtifact>com.google.protobuf:protoc:${protobuf.java.version}:exe:${os.detected.classifier}</protocArtifact>
                        <protoSourceRoot>${project.basedir}/src/main/resources/proto</protoSourceRoot>
                        <outputDirectory>${project.basedir}/src/main/java</outputDirectory>
                        <clearOutputDirectory>false</clearOutputDirectory>
                    </configuration>
                    <executions>
                        <execution>
                            <phase>compile</phase>
                            <goals>
                                <goal>compile</goal>
                            </goals>
                        </execution>
                    </executions>
                </plugin>

                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-jar-plugin</artifactId>
                    <version>${jar.plugin.version}</version>
                    <configuration>
                        <archive>
                            <manifest>
                                <!-- 框架不需要添加，子类打包时需要添加 -->
                                <!-- <addClasspath>true</addClasspath> -->
                                <classpathPrefix>${boot-lib-output}/</classpathPrefix>
                                <mainClass>${boot-main-class}</mainClass>
                            </manifest>
                            <manifestEntries>
                                <Start-Class>${boot-start-class}</Start-Class>
                            </manifestEntries>
                        </archive>
                    </configuration>
                </plugin>
            </plugins>
        </pluginManagement>
    </build>

    <profiles>
        <profile>
            <id>dev</id>
            <activation>
                <activeByDefault>true</activeByDefault>
            </activation>
        </profile>

        <profile>
            <id>deploy</id>
            <build>
                <plugins>
                    <plugin>
                        <groupId>org.apache.maven.plugins</groupId>
                        <artifactId>maven-javadoc-plugin</artifactId>
                        <version>${javadoc.plugin.version}</version>
                        <executions>
                            <execution>
                                <id>attach-javadocs</id>
                                <goals>
                                    <goal>jar</goal>
                                </goals>
                                <configuration>
                                    <additionalJOption>-Xdoclint:none</additionalJOption>
                                </configuration>
                            </execution>
                        </executions>
                    </plugin>

                    <plugin>
                        <groupId>org.apache.maven.plugins</groupId>
                        <artifactId>maven-gpg-plugin</artifactId>
                        <version>${gpg.plugin.version}</version>
                        <executions>
                            <execution>
                                <id>sign-artifacts</id>
                                <phase>verify</phase>
                                <goals>
                                    <goal>sign</goal>
                                </goals>
                                <configuration>
                                    <gpgArguments>
                                        <arg>--pinentry-mode</arg>
                                        <arg>loopback</arg>
                                    </gpgArguments>
                                </configuration>
                            </execution>
                        </executions>
                    </plugin>

                    <plugin>
                        <groupId>org.sonatype.central</groupId>
                        <artifactId>central-publishing-maven-plugin</artifactId>
                        <version>${central.publishing.plugin.version}</version>
                        <extensions>true</extensions>
                        <configuration>
                            <publishingServerId>kfyty</publishingServerId>
                            <tokenAuth>true</tokenAuth>
                            <autoPublish>true</autoPublish>
                            <waitUntil>published</waitUntil>
                        </configuration>
                    </plugin>
                </plugins>
            </build>
        </profile>
    </profiles>

    <distributionManagement>
        <snapshotRepository>
            <id>kfyty</id>
            <name>snapshot</name>
            <url>https://s01.oss.sonatype.org/content/repositories/snapshots/</url>
        </snapshotRepository>

        <repository>
            <id>kfyty</id>
            <name>releases</name>
            <url>https://s01.oss.sonatype.org/content/repositories/releases/</url>
        </repository>
    </distributionManagement>
</project>
