<?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>cn.itlym</groupId>
        <artifactId>shoulder-framework</artifactId>
        <version>0.3</version><!-- shoulder-version -->
        <!--<relativePath>../pom.xml</relativePath>-->
    </parent>
    <modelVersion>4.0.0</modelVersion>
    <packaging>pom</packaging>
    <artifactId>shoulder-dependencies</artifactId>

    <!-- dependencies version definition -->
    <properties>
        <!-- shoulder framework bom -->
        <shoulder-lombok.version>0.1</shoulder-lombok.version>
        <shoulder.version>0.3</shoulder.version><!-- shoulder-version -->

        <!-- dependencies bom -->

        <spring-boot.version>2.3.4.RELEASE</spring-boot.version>
        <!-- 由于Spring Boot提供了Maven BOM来管理依赖版本，因此您无需指定版本 -->
        <!--<spring-security.version></spring-security.version>-->

        <!-- 与 boot 版本对应关系 https://start.spring.io/actuator/info -->
        <!-- 最新 spring cloud 版本：https://spring.io/projects/spring-cloud#learn -->
        <spring-cloud.version>Hoxton.SR8</spring-cloud.version>

        <!-- build -->
        <java.version>11</java.version>
        <maven.compiler.source>${java.version}</maven.compiler.source>
        <maven.compiler.target>${java.version}</maven.compiler.target>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>

        <!-- api-doc OPEN-API2 -->
        <swagger.version>1.6.1</swagger.version>
        <!-- 使用 springfox 解析文档，管理 swagger2 的版本号 -->
        <springfox-swagger2.version>2.9.2</springfox-swagger2.version>
        <!-- knife4j 前身是 swagger-bootstrap-ui，一个用于优化 swagger-ui 的项目，视觉效果更好 -->
        <!--<knife4j.version>2.0.4</knife4j.version>-->

        <!-- api-doc OPEN-API3 -->
        <!-- openApi(swagger)是行业标准，swagger 17更名为 io.swagger.core.v3 但 swagger2 绝大多数开发者更熟悉而非 swagger3 -->
        <swagger3.version>2.1.2</swagger3.version>
        <!-- springdoc-openapi 是一个基于 oenapi3（swagger3）的，类似于springfox与swagger2的关系，它可能是未来 -->
        <springdoc-openapi.version>1.3.0</springdoc-openapi.version>

        <!-- apache-common-tools -->
        <commons-beanutils.version>1.9.3</commons-beanutils.version>
        <commons-codec.version>1.14</commons-codec.version>
        <commons-collections4.version>4.4</commons-collections4.version>
        <commons-exec.version>1.3</commons-exec.version>
        <commons-email.version>1.5</commons-email.version>
        <commons-io.version>2.7</commons-io.version>
        <commons-lang3.version>3.11</commons-lang3.version>
        <commons-net.version>3.6</commons-net.version>
        <commons-daemon.version>1.2.2</commons-daemon.version>


        <jna.version>5.5.0</jna.version>
        <!-- useful tools -->
        <hutool.version>5.4.3</hutool.version>
        <javassist.version>3.27.0-GA</javassist.version>

        <guava.version>29.0-jre</guava.version>
        <findbugs-annotations.version>3.0.0</findbugs-annotations.version>
        <alibaba.transmittable.version>2.11.5</alibaba.transmittable.version>

        <bcprov.jdk15on.version>1.66</bcprov.jdk15on.version>
        <bcpkix.jdk15on.version>1.66</bcpkix.jdk15on.version>
        <caffeine.version>2.8.5</caffeine.version>
        <mapstruct.version>1.3.1.Final</mapstruct.version>

        <!-- tools-file -->
        <tika-core.version>1.24.1</tika-core.version>
        <opencsv.version>4.1</opencsv.version>


        <!-- dataBase-->
        <mysql.version>8.0.19</mysql.version>
        <postgresql.version>42.2.5</postgresql.version>
        <druid.version>1.1.21</druid.version>
        <mybatis-plus.version>3.4.0</mybatis-plus.version>
        <BeeCP.version>2.5.4.1</BeeCP.version>
        <p6spy.version>3.9.1</p6spy.version>

        <micrometer.version>1.5.5</micrometer.version>

        <!-- test -->
        <mockito-all.version>1.10.19</mockito-all.version>
        <powermock.version>1.7.4</powermock.version>

        <maven-gpg-plugin.version>1.6</maven-gpg-plugin.version>
    </properties>

    <!--
    version:
    x     非硬性要求，建议 maven 优先使用 x 版本
    [x]   强制版本必须为 x
    [x,y) 开闭区间
    [x,y),[x,y) 多个区间时为 or
    -->

    <!-- dependencies version management  -->
    <dependencyManagement>

        <dependencies>

            <!-- ================================== bom party ==================================== -->

            <!-- spring boot -->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-parent</artifactId>
                <version>${spring-boot.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>

            <!--<dependency>
                <groupId>org.springframework.security</groupId>
                <artifactId>spring-security-bom</artifactId>
                <version>${spring-security.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>-->

            <!-- spring cloud -->
            <!-- https://cloud.spring.io/spring-cloud-static/Hoxton.SR3/reference/html/spring-cloud.html -->
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>${spring-cloud.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>

            <!-- ================================== Shoulder-framework party ==================================== -->

            <!--shoulder-base begin -->
            <dependency>
                <groupId>cn.itlym.shoulder</groupId>
                <artifactId>lombok</artifactId>
                <version>${shoulder-lombok.version}</version>
                <optional>true</optional>
            </dependency>

            <dependency>
                <groupId>cn.itlym</groupId>
                <artifactId>shoulder-core</artifactId>
                <version>${shoulder.version}</version>
            </dependency>

            <dependency>
                <groupId>cn.itlym</groupId>
                <artifactId>shoulder-cluster</artifactId>
                <version>${shoulder.version}</version>
            </dependency>

            <dependency>
                <groupId>cn.itlym</groupId>
                <artifactId>shoulder-crypto</artifactId>
                <version>${shoulder.version}</version>
            </dependency>

            <dependency>
                <groupId>cn.itlym</groupId>
                <artifactId>shoulder-crypto-negotiation</artifactId>
                <version>${shoulder.version}</version>
            </dependency>

            <dependency>
                <groupId>cn.itlym</groupId>
                <artifactId>shoulder-operation-log</artifactId>
                <version>${shoulder.version}</version>
            </dependency>

            <dependency>
                <groupId>cn.itlym</groupId>
                <artifactId>shoulder-security</artifactId>
                <version>${shoulder.version}</version>
            </dependency>

            <dependency>
                <groupId>cn.itlym</groupId>
                <artifactId>shoulder-security-code</artifactId>
                <version>${shoulder.version}</version>
            </dependency>

            <dependency>
                <groupId>cn.itlym</groupId>
                <artifactId>shoulder-data-db</artifactId>
                <version>${shoulder.version}</version>
            </dependency>

            <dependency>
                <groupId>cn.itlym</groupId>
                <artifactId>shoulder-http</artifactId>
                <version>${shoulder.version}</version>
            </dependency>

            <dependency>
                <groupId>cn.itlym</groupId>
                <artifactId>shoulder-validation</artifactId>
                <version>${shoulder.version}</version>
            </dependency>

            <dependency>
                <groupId>cn.itlym</groupId>
                <artifactId>shoulder-web</artifactId>
                <version>${shoulder.version}</version>
            </dependency>

            <!--shoulder-base end -->


            <!--shoulder-starters begin -->

            <dependency>
                <groupId>cn.itlym</groupId>
                <artifactId>shoulder-autoconfiguration</artifactId>
                <version>${shoulder.version}</version>
            </dependency>

            <dependency>
                <groupId>cn.itlym</groupId>
                <artifactId>shoulder-starter</artifactId>
                <version>${shoulder.version}</version>
            </dependency>

            <dependency>
                <groupId>cn.itlym</groupId>
                <artifactId>shoulder-starter-web</artifactId>
                <version>${shoulder.version}</version>
            </dependency>

            <dependency>
                <groupId>cn.itlym</groupId>
                <artifactId>shoulder-starter-operation-log</artifactId>
                <version>${shoulder.version}</version>
            </dependency>

            <dependency>
                <groupId>cn.itlym</groupId>
                <artifactId>shoulder-starter-beanmap</artifactId>
                <version>${shoulder.version}</version>
            </dependency>

            <dependency>
                <groupId>cn.itlym</groupId>
                <artifactId>shoulder-starter-security-browser</artifactId>
                <version>${shoulder.version}</version>
            </dependency>

            <dependency>
                <groupId>cn.itlym</groupId>
                <artifactId>shoulder-starter-auth-server</artifactId>
                <version>${shoulder.version}</version>
            </dependency>

            <dependency>
                <groupId>cn.itlym</groupId>
                <artifactId>shoulder-starter-security-code</artifactId>
                <version>${shoulder.version}</version>
            </dependency>

            <dependency>
                <groupId>cn.itlym</groupId>
                <artifactId>shoulder-starter-crypto</artifactId>
                <version>${shoulder.version}</version>
            </dependency>

            <dependency>
                <groupId>cn.itlym</groupId>
                <artifactId>shoulder-starter-monitor</artifactId>
                <version>${shoulder.version}</version>
            </dependency>

            <!--shoulder-starters end -->


            <!-- ====================================== The third party ========================================== -->

            <!--Swagger begin -->
            <!-- swagger2 -->
            <dependency>
                <groupId>io.swagger</groupId>
                <artifactId>swagger-annotations</artifactId>
                <version>${swagger.version}</version>
            </dependency>

            <!--<dependency>
                <groupId>io.springfox</groupId>
                <artifactId>springfox-swagger2</artifactId>
                <version>${springfox-swagger2.version}</version>
                <exclusions>
                    <exclusion>
                        <groupId>io.swagger</groupId>
                        <artifactId>swagger-annotations</artifactId>
                    </exclusion>
                    <exclusion>
                        <groupId>io.swagger</groupId>
                        <artifactId>swagger-models</artifactId>
                    </exclusion>
                </exclusions>
            </dependency>

            <dependency>
                <groupId>io.swagger</groupId>
                <artifactId>swagger-models</artifactId>
                <version>${swagger.version}</version>
            </dependency>
            &lt;!&ndash;springfox-bean-validators 用来支持 JSR 303 @ NotNull，@ Min，@ Max，@Size &ndash;&gt;
            <dependency>
                <groupId>io.springfox</groupId>
                <artifactId>springfox-bean-validators</artifactId>
                <version>${springfox-swagger2.version}</version>
            </dependency>
            <dependency>
                <groupId>io.springfox</groupId>
                <artifactId>springfox-core</artifactId>
                <version>${springfox-swagger2.version}</version>
            </dependency>-->

            <!--<dependency>
                <groupId>com.github.xiaoymin</groupId>
                <artifactId>knife4j-spring-boot-starter</artifactId>
                <version>${knife4j.version}</version>
            </dependency>-->


            <!--<dependency>
                <groupId>io.swagger.core.v3</groupId>
                <artifactId>swagger-annotations</artifactId>
                <version>${swagger3.version}</version>
                <optional>true</optional>
            </dependency>-->

            <!-- swagger3 springboot 2.2.x可能不支持，2.1.x支持 -->
            <!--<dependency>
                <groupId>org.springdoc</groupId>
                <artifactId>springdoc-openapi-webmvc-core</artifactId>
                <version>${springdoc-openapi.version}</version>
            </dependency>-->
            <!--<dependency>
                <groupId>org.springdoc</groupId>
                <artifactId>springdoc-openapi-ui</artifactId>
                <version>${springdoc-openapi.version}</version>
            </dependency>-->
            <!--<dependency>
                <groupId>org.springdoc</groupId>
                <artifactId>springdoc-openapi-security</artifactId>
                <version>${springdoc-openapi.version}</version>
            </dependency>-->


            <!--Commons begin -->
            <dependency>
                <groupId>commons-codec</groupId>
                <artifactId>commons-codec</artifactId>
                <version>${commons-codec.version}</version>
            </dependency>
            <dependency>
                <groupId>org.apache.commons</groupId>
                <artifactId>commons-collections4</artifactId>
                <version>${commons-collections4.version}</version>
            </dependency>
            <dependency>
                <groupId>commons-io</groupId>
                <artifactId>commons-io</artifactId>
                <version>${commons-io.version}</version>
            </dependency>
            <dependency>
                <groupId>org.apache.commons</groupId>
                <artifactId>commons-lang3</artifactId>
                <version>${commons-lang3.version}</version>
            </dependency>

            <dependency>
                <groupId>commons-daemon</groupId>
                <artifactId>commons-daemon</artifactId>
                <version>${commons-daemon.version}</version>
            </dependency>
            <!--Commons end -->

            <dependency>
                <groupId>org.javassist</groupId>
                <artifactId>javassist</artifactId>
                <version>${javassist.version}</version>
            </dependency>

            <dependency>
                <groupId>cn.hutool</groupId>
                <artifactId>hutool-core</artifactId>
                <version>${hutool.version}</version>
            </dependency>

            <dependency>
                <groupId>cn.hutool</groupId>
                <artifactId>hutool-all</artifactId>
                <version>${hutool.version}</version>
            </dependency>

            <dependency>
                <groupId>com.google.guava</groupId>
                <artifactId>guava</artifactId>
                <version>${guava.version}</version>
            </dependency>

            <dependency>
                <groupId>com.google.code.findbugs</groupId>
                <artifactId>annotations</artifactId>
                <version>${findbugs-annotations.version}</version>
            </dependency>

            <!-- java native access -->
            <dependency>
                <groupId>net.java.dev.jna</groupId>
                <artifactId>jna</artifactId>
                <version>${jna.version}</version>
            </dependency>

            <dependency>
                <groupId>org.mapstruct</groupId>
                <artifactId>mapstruct</artifactId>
                <version>${mapstruct.version}</version>
            </dependency>

            <dependency>
                <groupId>org.mapstruct</groupId>
                <artifactId>mapstruct-processor</artifactId>
                <version>${mapstruct.version}</version>
            </dependency>

            <!-- inheritable threadLocal -->
            <dependency>
                <groupId>com.alibaba</groupId>
                <artifactId>transmittable-thread-local</artifactId>
                <version>${alibaba.transmittable.version}</version>
            </dependency>

            <!-- crypto -->
            <dependency>
                <groupId>org.bouncycastle</groupId>
                <artifactId>bcprov-jdk15on</artifactId>
                <version>${bcprov.jdk15on.version}</version>
            </dependency>

            <dependency>
                <groupId>org.bouncycastle</groupId>
                <artifactId>bcpkix-jdk15on</artifactId>
                <version>${bcpkix.jdk15on.version}</version>
            </dependency>

            <!-- spring boot已经管掉 JDK 11 兼容 jdk8 的相关依赖 -->

            <!-- analyze file MIME -->
            <dependency>
                <groupId>org.apache.tika</groupId>
                <artifactId>tika-core</artifactId>
                <version>${tika-core.version}</version>
            </dependency>

            <!-- db begin -->
            <!-- 数据库 连接池 默认使用高性能的 beecp （性能是 spring-boot 默认 hikairCP 的两倍，功能较少）-->
            <dependency>
                <groupId>com.github.chris2018998</groupId>
                <artifactId>BeeCP</artifactId>
                <version>${BeeCP.version}</version>
            </dependency>
            <!-- 弥补 beecp 的功能缺失（SQL日志打印、监控） -->
            <dependency>
                <groupId>p6spy</groupId>
                <artifactId>p6spy</artifactId>
                <version>${p6spy.version}</version>
            </dependency>

            <dependency>
                <groupId>com.baomidou</groupId>
                <artifactId>mybatis-plus-boot-starter</artifactId>
                <version>${mybatis-plus.version}</version>
            </dependency>
            <dependency>
                <groupId>com.baomidou</groupId>
                <artifactId>mybatis-plus-generator</artifactId>
                <version>${mybatis-plus.version}</version>
            </dependency>
            <!-- db end -->


            <!-- monitor -->
            <dependency>
                <groupId>io.micrometer</groupId>
                <artifactId>micrometer-registry-prometheus</artifactId>
                <version>${micrometer.version}</version>
            </dependency>
            <!-- monitor end -->

            <!-- test -->
            <dependency>
                <groupId>org.mockito</groupId>
                <artifactId>mockito-all</artifactId>
                <version>${mockito-all.version}</version>
                <scope>test</scope>
            </dependency>
            <dependency>
                <groupId>org.powermock</groupId>
                <artifactId>powermock-module-junit4</artifactId>
                <version>${powermock.version}</version>
                <scope>test</scope>
            </dependency>
            <dependency>
                <groupId>org.powermock</groupId>
                <artifactId>powermock-api-mockito</artifactId>
                <version>${powermock.version}</version>
                <scope>test</scope>
            </dependency>
            <dependency>
                <groupId>org.powermock</groupId>
                <artifactId>powermock-api-mockito2</artifactId>
                <version>${powermock.version}</version>
                <scope>test</scope>
            </dependency>

        </dependencies>
    </dependencyManagement>


    <build>
        <plugins>
            <!-- GPG  发布插件-->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-gpg-plugin</artifactId>
                <version>${maven-gpg-plugin.version}</version>
                <executions>
                    <execution>
                        <id>sign-artifacts</id>
                        <phase>verify</phase><!-- gpg phase verify deploy -->
                        <goals>
                            <goal>sign</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>

</project>
