<?xml version="1.0" encoding="UTF-8"?>
<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <modelVersion>4.0.0</modelVersion>
  <parent>
    <groupId>cn.ypbin</groupId>
    <artifactId>ypbin-starter</artifactId>
    <version>4.2.1</version>
  </parent>
  <artifactId>ypbin-starter-dependencies</artifactId>
  <version>4.2.1</version>
  <packaging>pom</packaging>
  <name>${project.artifactId}</name>
  <description>统一依赖与插件版本管理，同时作为所有子模块的 parent</description>
  <licenses>
    <license>
      <name>Apache License, Version 2.0</name>
      <url>https://www.apache.org/licenses/LICENSE-2.0.txt</url>
      <distribution>repo</distribution>
    </license>
  </licenses>
  <properties>
    <spring-ai.version>2.0.1</spring-ai.version>
    <maven-source-plugin.version>3.3.1</maven-source-plugin.version>
    <hutool.version>5.8.48</hutool.version>
    <sa-token.version>1.46.0</sa-token.version>
    <spring-boot.version>4.1.1</spring-boot.version>
    <spring-cloud-alibaba.version>2025.1.0.0</spring-cloud-alibaba.version>
    <spring-cloud.version>2025.1.3</spring-cloud.version>
    <aws-sdk-v2.version>2.55.14</aws-sdk-v2.version>
    <maven-javadoc-plugin.version>3.12.0</maven-javadoc-plugin.version>
    <springdoc.version>3.1.1</springdoc.version>
    <fesod.version>2.1.0-incubating</fesod.version>
    <poi.version>5.5.1</poi.version>
    <jacoco.branch.minimum>0.45</jacoco.branch.minimum>
    <jacoco-maven-plugin.version>0.8.12</jacoco-maven-plugin.version>
    <nullaway.version>0.14.2</nullaway.version>
    <sms4j.version>3.3.5</sms4j.version>
    <error-prone.version>2.50.0</error-prone.version>
    <maven-failsafe-plugin.version>3.6.0</maven-failsafe-plugin.version>
    <bouncycastle.version>1.86</bouncycastle.version>
    <jsoup.version>1.23.2</jsoup.version>
    <tianai-captcha.version>1.5.5</tianai-captcha.version>
    <nullaway.packages>cn.ypbin.starter.__nullaway_placeholder__</nullaway.packages>
    <mybatis-plus.version>3.5.17</mybatis-plus.version>
    <spotless-maven-plugin.version>3.10.4</spotless-maven-plugin.version>
    <maven-surefire-plugin.version>3.6.0</maven-surefire-plugin.version>
    <paho-mqtt.version>1.2.5</paho-mqtt.version>
    <testcontainers.version>2.0.5</testcontainers.version>
    <archunit.version>1.5.1</archunit.version>
    <justauth.version>1.16.7</justauth.version>
    <xxl-job.version>3.5.0</xxl-job.version>
  </properties>
  <dependencyManagement>
    <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>org.springframework.ai</groupId>
        <artifactId>spring-ai-bom</artifactId>
        <version>${spring-ai.version}</version>
        <type>pom</type>
        <scope>import</scope>
      </dependency>
      <dependency>
        <groupId>org.testcontainers</groupId>
        <artifactId>testcontainers-bom</artifactId>
        <version>${testcontainers.version}</version>
        <type>pom</type>
        <scope>import</scope>
      </dependency>
      <dependency>
        <groupId>software.amazon.awssdk</groupId>
        <artifactId>bom</artifactId>
        <version>${aws-sdk-v2.version}</version>
        <type>pom</type>
        <scope>import</scope>
      </dependency>
      <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-dependencies</artifactId>
        <version>${spring-cloud.version}</version>
        <type>pom</type>
        <scope>import</scope>
      </dependency>
      <dependency>
        <groupId>com.alibaba.cloud</groupId>
        <artifactId>spring-cloud-alibaba-dependencies</artifactId>
        <version>${spring-cloud-alibaba.version}</version>
        <type>pom</type>
        <scope>import</scope>
      </dependency>
      <dependency>
        <groupId>org.apache.fesod</groupId>
        <artifactId>fesod-sheet</artifactId>
        <version>${fesod.version}</version>
      </dependency>
      <dependency>
        <groupId>org.apache.poi</groupId>
        <artifactId>poi</artifactId>
        <version>${poi.version}</version>
      </dependency>
      <dependency>
        <groupId>org.apache.poi</groupId>
        <artifactId>poi-ooxml</artifactId>
        <version>${poi.version}</version>
      </dependency>
      <dependency>
        <groupId>org.jsoup</groupId>
        <artifactId>jsoup</artifactId>
        <version>${jsoup.version}</version>
      </dependency>
      <dependency>
        <groupId>commons-io</groupId>
        <artifactId>commons-io</artifactId>
        <version>2.22.0</version>
      </dependency>
      <dependency>
        <groupId>com.github.victools</groupId>
        <artifactId>jsonschema-generator</artifactId>
        <version>5.0.0</version>
      </dependency>
      <dependency>
        <groupId>com.github.victools</groupId>
        <artifactId>jsonschema-module-jackson</artifactId>
        <version>5.0.0</version>
      </dependency>
      <dependency>
        <groupId>com.github.victools</groupId>
        <artifactId>jsonschema-module-swagger-2</artifactId>
        <version>5.0.0</version>
      </dependency>
      <dependency>
        <groupId>cloud.tianai.captcha</groupId>
        <artifactId>tianai-captcha-springboot-starter</artifactId>
        <version>${tianai-captcha.version}</version>
      </dependency>
      <dependency>
        <groupId>org.bouncycastle</groupId>
        <artifactId>bcprov-jdk18on</artifactId>
        <version>${bouncycastle.version}</version>
      </dependency>
      <dependency>
        <groupId>cn.dev33</groupId>
        <artifactId>sa-token-spring-boot4-starter</artifactId>
        <version>${sa-token.version}</version>
      </dependency>
      <dependency>
        <groupId>cn.dev33</groupId>
        <artifactId>sa-token-redis-template</artifactId>
        <version>${sa-token.version}</version>
      </dependency>
      <dependency>
        <groupId>cn.dev33</groupId>
        <artifactId>sa-token-jackson3</artifactId>
        <version>${sa-token.version}</version>
      </dependency>
      <dependency>
        <groupId>com.xuxueli</groupId>
        <artifactId>xxl-job-core</artifactId>
        <version>${xxl-job.version}</version>
      </dependency>
      <dependency>
        <groupId>com.baomidou</groupId>
        <artifactId>mybatis-plus-spring-boot4-starter</artifactId>
        <version>${mybatis-plus.version}</version>
      </dependency>
      <dependency>
        <groupId>com.baomidou</groupId>
        <artifactId>mybatis-plus-jsqlparser</artifactId>
        <version>${mybatis-plus.version}</version>
      </dependency>
      <dependency>
        <groupId>cn.hutool</groupId>
        <artifactId>hutool-all</artifactId>
        <version>${hutool.version}</version>
      </dependency>
      <dependency>
        <groupId>cn.hutool</groupId>
        <artifactId>hutool-dfa</artifactId>
        <version>${hutool.version}</version>
      </dependency>
      <dependency>
        <groupId>me.zhyd.oauth</groupId>
        <artifactId>JustAuth</artifactId>
        <version>${justauth.version}</version>
      </dependency>
      <dependency>
        <groupId>org.eclipse.paho</groupId>
        <artifactId>org.eclipse.paho.client.mqttv3</artifactId>
        <version>${paho-mqtt.version}</version>
      </dependency>
      <dependency>
        <groupId>org.dromara.sms4j</groupId>
        <artifactId>sms4j-spring-boot-starter</artifactId>
        <version>${sms4j.version}</version>
      </dependency>
      <dependency>
        <groupId>org.springdoc</groupId>
        <artifactId>springdoc-openapi-starter-webmvc-ui</artifactId>
        <version>${springdoc.version}</version>
      </dependency>
      <dependency>
        <groupId>org.springdoc</groupId>
        <artifactId>springdoc-openapi-starter-webflux-ui</artifactId>
        <version>${springdoc.version}</version>
      </dependency>
      <dependency>
        <groupId>cn.ypbin</groupId>
        <artifactId>ypbin-starter-core</artifactId>
        <version>${revision}</version>
      </dependency>
      <dependency>
        <groupId>cn.ypbin</groupId>
        <artifactId>ypbin-starter-json</artifactId>
        <version>${revision}</version>
      </dependency>
      <dependency>
        <groupId>cn.ypbin</groupId>
        <artifactId>ypbin-starter-web</artifactId>
        <version>${revision}</version>
      </dependency>
      <dependency>
        <groupId>cn.ypbin</groupId>
        <artifactId>ypbin-starter-data</artifactId>
        <version>${revision}</version>
      </dependency>
      <dependency>
        <groupId>cn.ypbin</groupId>
        <artifactId>ypbin-starter-cache</artifactId>
        <version>${revision}</version>
      </dependency>
      <dependency>
        <groupId>cn.ypbin</groupId>
        <artifactId>ypbin-starter-security</artifactId>
        <version>${revision}</version>
      </dependency>
      <dependency>
        <groupId>cn.ypbin</groupId>
        <artifactId>ypbin-starter-api-doc</artifactId>
        <version>${revision}</version>
      </dependency>
      <dependency>
        <groupId>cn.ypbin</groupId>
        <artifactId>ypbin-starter-storage</artifactId>
        <version>${revision}</version>
      </dependency>
      <dependency>
        <groupId>cn.ypbin</groupId>
        <artifactId>ypbin-starter-log</artifactId>
        <version>${revision}</version>
      </dependency>
      <dependency>
        <groupId>cn.ypbin</groupId>
        <artifactId>ypbin-starter-tracking</artifactId>
        <version>${revision}</version>
      </dependency>
      <dependency>
        <groupId>cn.ypbin</groupId>
        <artifactId>ypbin-starter-tools</artifactId>
        <version>${revision}</version>
      </dependency>
      <dependency>
        <groupId>cn.ypbin</groupId>
        <artifactId>ypbin-starter-extension-tenant</artifactId>
        <version>${revision}</version>
      </dependency>
      <dependency>
        <groupId>cn.ypbin</groupId>
        <artifactId>ypbin-starter-extension-crud</artifactId>
        <version>${revision}</version>
      </dependency>
      <dependency>
        <groupId>cn.ypbin</groupId>
        <artifactId>ypbin-starter-extension-datapermission</artifactId>
        <version>${revision}</version>
      </dependency>
      <dependency>
        <groupId>cn.ypbin</groupId>
        <artifactId>ypbin-starter-excel</artifactId>
        <version>${revision}</version>
      </dependency>
      <dependency>
        <groupId>cn.ypbin</groupId>
        <artifactId>ypbin-starter-captcha</artifactId>
        <version>${revision}</version>
      </dependency>
      <dependency>
        <groupId>cn.ypbin</groupId>
        <artifactId>ypbin-starter-messaging</artifactId>
        <version>${revision}</version>
      </dependency>
      <dependency>
        <groupId>cn.ypbin</groupId>
        <artifactId>ypbin-starter-sensitive-words</artifactId>
        <version>${revision}</version>
      </dependency>
      <dependency>
        <groupId>cn.ypbin</groupId>
        <artifactId>ypbin-starter-i18n</artifactId>
        <version>${revision}</version>
      </dependency>
      <dependency>
        <groupId>cn.ypbin</groupId>
        <artifactId>ypbin-starter-api-crypto</artifactId>
        <version>${revision}</version>
      </dependency>
      <dependency>
        <groupId>cn.ypbin</groupId>
        <artifactId>ypbin-starter-social</artifactId>
        <version>${revision}</version>
      </dependency>
      <dependency>
        <groupId>cn.ypbin</groupId>
        <artifactId>ypbin-starter-sign</artifactId>
        <version>${revision}</version>
      </dependency>
      <dependency>
        <groupId>cn.ypbin</groupId>
        <artifactId>ypbin-starter-iot</artifactId>
        <version>${revision}</version>
      </dependency>
      <dependency>
        <groupId>cn.ypbin</groupId>
        <artifactId>ypbin-starter-cloud-core</artifactId>
        <version>${revision}</version>
      </dependency>
      <dependency>
        <groupId>cn.ypbin</groupId>
        <artifactId>ypbin-starter-cloud-nacos</artifactId>
        <version>${revision}</version>
      </dependency>
      <dependency>
        <groupId>cn.ypbin</groupId>
        <artifactId>ypbin-starter-cloud-loadbalancer</artifactId>
        <version>${revision}</version>
      </dependency>
      <dependency>
        <groupId>cn.ypbin</groupId>
        <artifactId>ypbin-starter-cloud-observability</artifactId>
        <version>${revision}</version>
      </dependency>
      <dependency>
        <groupId>cn.ypbin</groupId>
        <artifactId>ypbin-starter-cloud-sentinel</artifactId>
        <version>${revision}</version>
      </dependency>
      <dependency>
        <groupId>cn.ypbin</groupId>
        <artifactId>ypbin-starter-cloud-gateway</artifactId>
        <version>${revision}</version>
      </dependency>
      <dependency>
        <groupId>cn.ypbin</groupId>
        <artifactId>ypbin-starter-async</artifactId>
        <version>${revision}</version>
      </dependency>
      <dependency>
        <groupId>cn.ypbin</groupId>
        <artifactId>ypbin-starter-job</artifactId>
        <version>${revision}</version>
      </dependency>
      <dependency>
        <groupId>cn.ypbin</groupId>
        <artifactId>ypbin-starter-license</artifactId>
        <version>${revision}</version>
      </dependency>
      <dependency>
        <groupId>cn.ypbin</groupId>
        <artifactId>ypbin-starter-app-web</artifactId>
        <version>${revision}</version>
      </dependency>
      <dependency>
        <groupId>cn.ypbin</groupId>
        <artifactId>ypbin-starter-app-cloud</artifactId>
        <version>${revision}</version>
      </dependency>
      <dependency>
        <groupId>cn.ypbin</groupId>
        <artifactId>ypbin-starter-xxljob</artifactId>
        <version>${revision}</version>
      </dependency>
      <dependency>
        <groupId>cn.ypbin</groupId>
        <artifactId>ypbin-starter-test</artifactId>
        <version>${revision}</version>
      </dependency>
      <dependency>
        <groupId>cn.ypbin</groupId>
        <artifactId>ypbin-starter-ai</artifactId>
        <version>${revision}</version>
      </dependency>
      <dependency>
        <groupId>com.tngtech.archunit</groupId>
        <artifactId>archunit-junit5</artifactId>
        <version>${archunit.version}</version>
      </dependency>
    </dependencies>
  </dependencyManagement>
  <dependencies>
    <dependency>
      <groupId>org.junit.jupiter</groupId>
      <artifactId>junit-jupiter</artifactId>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>org.assertj</groupId>
      <artifactId>assertj-core</artifactId>
      <scope>test</scope>
    </dependency>
  </dependencies>
  <build>
    <pluginManagement>
      <plugins>
        <plugin>
          <groupId>com.diffplug.spotless</groupId>
          <artifactId>spotless-maven-plugin</artifactId>
          <version>${spotless-maven-plugin.version}</version>
          <configuration>
            <java>
              <licenseHeader>
                <content>/*
 * Copyright (c) 2024-present ypbin-starter authors.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     https://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */</content>
              </licenseHeader>
              <trimTrailingWhitespace />
              <endWithNewline />
              <importOrder />
              <removeUnusedImports />
            </java>
          </configuration>
        </plugin>
      </plugins>
    </pluginManagement>
    <plugins>
      <plugin>
        <groupId>com.diffplug.spotless</groupId>
        <artifactId>spotless-maven-plugin</artifactId>
        <executions>
          <execution>
            <id>spotless-check</id>
            <phase>process-test-classes</phase>
            <goals>
              <goal>check</goal>
            </goals>
          </execution>
        </executions>
      </plugin>
      <plugin>
        <groupId>org.jacoco</groupId>
        <artifactId>jacoco-maven-plugin</artifactId>
        <version>${jacoco-maven-plugin.version}</version>
        <executions>
          <execution>
            <id>jacoco-initialize</id>
            <goals>
              <goal>prepare-agent</goal>
            </goals>
          </execution>
          <execution>
            <id>jacoco-report</id>
            <phase>test</phase>
            <goals>
              <goal>report</goal>
            </goals>
          </execution>
          <execution>
            <id>jacoco-check</id>
            <phase>test</phase>
            <goals>
              <goal>check</goal>
            </goals>
            <configuration>
              <haltOnFailure>true</haltOnFailure>
              <rules>
                <rule>
                  <element>BUNDLE</element>
                  <limits>
                    <limit>
                      <counter>INSTRUCTION</counter>
                      <value>COVEREDRATIO</value>
                      <minimum>0.80</minimum>
                    </limit>
                    <limit>
                      <counter>BRANCH</counter>
                      <value>COVEREDRATIO</value>
                      <minimum>${jacoco.branch.minimum}</minimum>
                    </limit>
                  </limits>
                </rule>
              </rules>
            </configuration>
          </execution>
        </executions>
      </plugin>
      <plugin>
        <artifactId>maven-surefire-plugin</artifactId>
        <version>${maven-surefire-plugin.version}</version>
        <configuration>
          <excludes>
            <exclude>**/*IT.java</exclude>
          </excludes>
        </configuration>
      </plugin>
      <plugin>
        <artifactId>maven-failsafe-plugin</artifactId>
        <version>${maven-failsafe-plugin.version}</version>
        <configuration>
          <includes>
            <include>**/*IT.java</include>
          </includes>
        </configuration>
      </plugin>
    </plugins>
  </build>
  <profiles>
    <profile>
      <id>it</id>
      <build>
        <plugins>
          <plugin>
            <artifactId>maven-failsafe-plugin</artifactId>
            <executions>
              <execution>
                <id>integration-tests</id>
                <goals>
                  <goal>integration-test</goal>
                  <goal>verify</goal>
                </goals>
              </execution>
            </executions>
          </plugin>
        </plugins>
      </build>
    </profile>
    <profile>
      <id>release</id>
      <build>
        <plugins>
          <plugin>
            <artifactId>maven-source-plugin</artifactId>
            <version>${maven-source-plugin.version}</version>
            <executions>
              <execution>
                <id>attach-sources</id>
                <phase>package</phase>
                <goals>
                  <goal>jar-no-fork</goal>
                </goals>
              </execution>
            </executions>
          </plugin>
          <plugin>
            <artifactId>maven-javadoc-plugin</artifactId>
            <version>${maven-javadoc-plugin.version}</version>
            <executions>
              <execution>
                <id>attach-javadocs</id>
                <phase>package</phase>
                <goals>
                  <goal>jar</goal>
                </goals>
              </execution>
            </executions>
            <configuration>
              <doclint>none</doclint>
              <charset>UTF-8</charset>
              <encoding>UTF-8</encoding>
              <docencoding>UTF-8</docencoding>
            </configuration>
          </plugin>
        </plugins>
      </build>
    </profile>
    <profile>
      <id>nullaway</id>
      <build>
        <plugins>
          <plugin>
            <artifactId>maven-compiler-plugin</artifactId>
            <configuration>
              <fork>true</fork>
              <compilerArgs>
                <arg>-XDcompilePolicy=simple</arg>
                <arg>-XDaddTypeAnnotationsToSymbol=true</arg>
                <arg>--should-stop=ifError=FLOW</arg>
                <arg>-Xplugin:ErrorProne -XepDisableAllChecks -Xep:NullAway:ERROR -XepOpt:NullAway:AnnotatedPackages=${nullaway.packages}</arg>
                <arg>-J--add-exports=jdk.compiler/com.sun.tools.javac.api=ALL-UNNAMED</arg>
                <arg>-J--add-exports=jdk.compiler/com.sun.tools.javac.file=ALL-UNNAMED</arg>
                <arg>-J--add-exports=jdk.compiler/com.sun.tools.javac.main=ALL-UNNAMED</arg>
                <arg>-J--add-exports=jdk.compiler/com.sun.tools.javac.model=ALL-UNNAMED</arg>
                <arg>-J--add-exports=jdk.compiler/com.sun.tools.javac.parser=ALL-UNNAMED</arg>
                <arg>-J--add-exports=jdk.compiler/com.sun.tools.javac.processing=ALL-UNNAMED</arg>
                <arg>-J--add-exports=jdk.compiler/com.sun.tools.javac.tree=ALL-UNNAMED</arg>
                <arg>-J--add-exports=jdk.compiler/com.sun.tools.javac.util=ALL-UNNAMED</arg>
                <arg>-J--add-opens=jdk.compiler/com.sun.tools.javac.code=ALL-UNNAMED</arg>
                <arg>-J--add-opens=jdk.compiler/com.sun.tools.javac.comp=ALL-UNNAMED</arg>
              </compilerArgs>
              <annotationProcessorPaths>
                <path>
                  <groupId>org.springframework.boot</groupId>
                  <artifactId>spring-boot-configuration-processor</artifactId>
                  <version>${spring-boot.version}</version>
                </path>
                <path>
                  <groupId>com.google.errorprone</groupId>
                  <artifactId>error_prone_core</artifactId>
                  <version>${error-prone.version}</version>
                </path>
                <path>
                  <groupId>com.uber.nullaway</groupId>
                  <artifactId>nullaway</artifactId>
                  <version>${nullaway.version}</version>
                </path>
              </annotationProcessorPaths>
            </configuration>
          </plugin>
        </plugins>
      </build>
    </profile>
    <profile>
      <id>dep-convergence</id>
      <build>
        <plugins>
          <plugin>
            <artifactId>maven-enforcer-plugin</artifactId>
            <executions>
              <execution>
                <id>enforce-dependency-convergence</id>
                <phase>validate</phase>
                <goals>
                  <goal>enforce</goal>
                </goals>
                <configuration>
                  <rules>
                    <dependencyConvergence />
                  </rules>
                </configuration>
              </execution>
            </executions>
          </plugin>
        </plugins>
      </build>
    </profile>
  </profiles>
</project>
