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

    <!--
      仓结构说明：
      violin 微服务套件采用"多 git 仓 + 单 Maven 父 POM"策略。

      每个业务仓独立 git 仓库（violin-auth / violin-bookmark / violin-calendar / ...），
      通过 Maven 坐标引用本父 POM，集中管理依赖版本。

      为什么是多仓而不是 monorepo？
        1. 业务关联性不强（auth / bookmark / calendar 各做各的）
        2. Drone CI 按仓独立触发，多仓更轻
        3. K8s 按 service 独立部署，版本独立 release
        4. 团队小（1-3 人），跨仓重构频率低

      如果哪天业务关联变重（比如 auth 和 user 服务绑死），再考虑合并那 2 个。
    -->
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>3.5.4</version>
    </parent>

    <groupId>cn.violin</groupId>
    <artifactId>violin-parent</artifactId>
    <packaging>pom</packaging>
    <version>2.2</version>
    <name>violin-parent</name>
    <description>violin 微服务套件的 Maven 父 POM：集中管理 Spring Boot、Spring Cloud、MyBatis Plus 等依赖版本</description>

    <properties>
        <java.version>17</java.version>
        <fastjson.version>1.2.83</fastjson.version>
        <micrometer-tracing.version>1.4.0</micrometer-tracing.version>
        <zipkin-reporter-brave.version>2.27.0</zipkin-reporter-brave.version>
        <postgresql.version>42.7.2</postgresql.version>
        <lombok.version>1.18.30</lombok.version>
        <jedis.version>3.8.0</jedis.version>
        <mybatis.version>3.0.3</mybatis.version>
        <mybatis-plus.version>3.5.5</mybatis-plus.version>
<!--        <flyway-core.version>12.9.0</flyway-core.version>-->
        <jaxb-api.version>2.3.1</jaxb-api.version>
        <java-jwt.version>4.5.0</java-jwt.version>
        <maven.compiler.encoding>UTF-8</maven.compiler.encoding>
        <maven.compiler.version>3.1</maven.compiler.version>
        <!-- 文件拷贝时的编码 jenkins 使用时 产生乱码问题 -->
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
    </properties>

    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-dependencies</artifactId>
                <version>3.5.4</version> <!-- Spring Boot 3.2.x 最新稳定版 -->
                <type>pom</type>
                <scope>import</scope>
            </dependency>

            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>2025.0.0</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>

            <!-- 3. 声明 micrometer-tracing 核心依赖（无版本，继承 Spring Cloud BOM 的版本） -->
            <dependency>
                <groupId>io.micrometer</groupId>
                <artifactId>micrometer-tracing</artifactId>
            </dependency>

            <dependency>
                <groupId>io.micrometer</groupId>
                <artifactId>micrometer-tracing-bridge-brave</artifactId>
            </dependency>

            <dependency>
                <groupId>io.zipkin.reporter2</groupId>
                <artifactId>zipkin-reporter-brave</artifactId>
            </dependency>

            <dependency>
                <groupId>org.postgresql</groupId>
                <artifactId>postgresql</artifactId>
                <version>${postgresql.version}</version>
            </dependency>
            <dependency>
                <groupId>com.alibaba</groupId>
                <artifactId>fastjson</artifactId>
                <version>${fastjson.version}</version>
            </dependency>
            <dependency>
                <groupId>org.mybatis.spring.boot</groupId>
                <artifactId>mybatis-spring-boot-starter</artifactId>
                <version>${mybatis.version}</version>
            </dependency>
            <dependency>
                <groupId>com.auth0</groupId>
                <artifactId>java-jwt</artifactId>
                <version>${java-jwt.version}</version>
            </dependency>
            <dependency>
                <groupId>jakarta.xml.bind</groupId>
                <artifactId>jakarta.xml.bind-api</artifactId>
                <version>4.0.1</version>
            </dependency>
            <dependency>
                <groupId>jakarta.persistence</groupId>
                <artifactId>jakarta.persistence-api</artifactId>
                <version>3.1.0</version>
            </dependency>
            <dependency>
                <groupId>org.projectlombok</groupId>
                <artifactId>lombok</artifactId>
                <version>${lombok.version}</version>
            </dependency>
            <dependency>
                <groupId>redis.clients</groupId>
                <artifactId>jedis</artifactId>
                <version>${jedis.version}</version>
            </dependency>
            <dependency>
                <groupId>com.baomidou</groupId>
                <artifactId>mybatis-plus-boot-starter</artifactId>
                <version>${mybatis-plus.version}</version>
            </dependency>

            <!-- Spring Boot 3.x 兼容：强制覆盖 mybatis 系列版本。
                 mybatis-plus-boot-starter 3.5.5 默认依赖：
                   - mybatis 3.5.13（与 mybatis-spring 3.0.3 的 Configuration API 不兼容）
                   - mybatis-spring 2.1.x（MapperFactoryBean.getObjectType() 返回 String）
                 解决：强制升级 mybatis 到 3.5.15、mybatis-spring 到 3.0.3。
                 也可以改用 mybatis-plus-spring-boot3-starter（更彻底，但需要下载）。-->
            <dependency>
                <groupId>org.mybatis</groupId>
                <artifactId>mybatis</artifactId>
                <version>3.5.15</version>
            </dependency>
            <dependency>
                <groupId>org.mybatis</groupId>
                <artifactId>mybatis-spring</artifactId>
                <version>3.0.3</version>
            </dependency>
            <dependency>
                <groupId>org.apache.commons</groupId>
                <artifactId>commons-lang3</artifactId>
                <version>3.18.0</version>
            </dependency>
            <dependency>
                <groupId>cn.hutool</groupId>
                <artifactId>hutool-all</artifactId>
                <version>5.8.39</version>
            </dependency>
            <dependency>
                <groupId>cn.hutool</groupId>
                <artifactId>hutool-extra</artifactId>
                <version>5.8.39</version>
            </dependency>

            <!-- Spring Boot 测试 -->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-test</artifactId>
                <scope>test</scope>
            </dependency>

            <!-- SpringDoc OpenAPI（接口文档） -->
            <dependency>
                <groupId>org.springdoc</groupId>
                <artifactId>springdoc-openapi-starter-webmvc-ui</artifactId>
                <version>2.6.0</version>
            </dependency>
        </dependencies>
    </dependencyManagement>

    <repositories>
        <repository>
            <id>gitea</id>
            <url>https://gitea.violin-work.online/api/packages/violin/maven</url>
        </repository>
    </repositories>

    <distributionManagement>
        <repository>
            <id>gitea</id>
            <url>https://gitea.violin-work.online/api/packages/violin/maven</url>
        </repository>
        <snapshotRepository>
            <id>gitea</id>
            <url>https://gitea.violin-work.online/api/packages/violin/maven</url>
        </snapshotRepository>
    </distributionManagement>

    <build>
        <pluginManagement>
            <plugins>
                <plugin>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-maven-plugin</artifactId>
                </plugin>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-compiler-plugin</artifactId>
                </plugin>
            </plugins>
        </pluginManagement>
    </build>

</project>