SpringBoot框架pom.xml中标签解读

常见标签解释:

<?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>marchsoft</groupId>
    <!--项目名-->
    <artifactId>smpe-admin</artifactId>
    <!--打包方式-->
    <packaging>pom</packaging>
    <!--版本-->
    <version>1.0.0-RELEASE</version>

	<!--用来管理同个项目中的各个模块-->
    <modules>
        <module>smpe-common</module>
        <module>smpe-system</module>
        <module>smpe-log</module>
    </modules>

    <!--项目名称,Maven产生的文档用-->
    <name>SMPE-ADMIN 后台管理</name>
    <!--项目的描述,Maven产生的文档用-->
    <description>SMPE是一个基于EL-ADMIN、Spring Boot 2.1.0、JDK1.8+ 、 Mybatis Plus、JWT + Spring
        Security、Redis、Vue的前后端分离的后台管理系统
    </description>

	<!--url标签对项目而言没啥用,此处是github地址-->
    <url>https://github.com/sanyueruanjian/smpe-admin</url>

    <!--父级项目-->
    <parent>
    	<!--子模块中填写的是父模块的groupId-->
        <groupId>org.springframework.boot</groupId>
        <!--子模块中填写的是父模块的artifactId-->
        <artifactId>spring-boot-starter-parent</artifactId>
        <!--子模块中填写的是父模块的version-->
        <version>2.1.0.RELEASE</version>
    </parent>

    <!--属性设置(此处的写法便于全局统一管理)-->
    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <java.version>1.8</java.version>
        <mysql.version>5.1.48</mysql.version>
        <lombok.version>1.18.8</lombok.version>
        <log4jdbc.version>1.16</log4jdbc.version>
        <mybatis.plus.version>3.4.1</mybatis.plus.version>
        <swagger.version>2.9.2</swagger.version>
        <swagger.models.version>1.5.21</swagger.models.version>
        <swagger.annotations.version>1.5.21</swagger.annotations.version>
        <druid.version>1.1.22</druid.version>
        <mapstruct.version>1.3.1.Final</mapstruct.version>
        <hutool.version>5.5.0</hutool.version>
        <jjwt.version>0.11.1</jjwt.version>
        <UserAgentUtils.version>1.20</UserAgentUtils.version>
        <ip2region.version>1.7.2</ip2region.version>
        <captcha.version>1.6.2</captcha.version>
        <freemarker.version>2.3.30</freemarker.version>
        <poi.version>3.17</poi.version>
        <xercesImpl.version>2.12.0</xercesImpl.version>
        <aspectjrt.version>1.9.5</aspectjrt.version>
        <fastjson.version>1.2.70</fastjson.version>
        <knife4j.version>2.0.4</knife4j.version>
        <inject.version>1</inject.version>
    </properties>

    <!-- 锁定jar包版本 -->
    <dependencyManagement>
        <!--依赖管理-->
        <dependencies>
            <!-- hutool的java开发工具包 -->
            <dependency>
                <groupId>cn.hutool</groupId>
                <artifactId>hutool-all</artifactId>
                <!--读取properties标签中的版本号-->
                <version>${hutool.version}</version>
            </dependency>

            <!--lombok插件-->
            <dependency>
                <groupId>org.projectlombok</groupId>
                <artifactId>lombok</artifactId>
                <version>${lombok.version}</version>
            </dependency>

            <!-- fastjson -->
            <dependency>
                <groupId>com.alibaba</groupId>
                <artifactId>fastjson</artifactId>
                <version>${fastjson.version}</version>
            </dependency>

            <!--Mysql依赖包-->
            <dependency>
                <groupId>mysql</groupId>
                <artifactId>mysql-connector-java</artifactId>
                <version>${mysql.version}</version>
            </dependency>

            <!-- druid数据源驱动 -->
            <dependency>
                <groupId>com.alibaba</groupId>
                <artifactId>druid-spring-boot-starter</artifactId>
                <version>${druid.version}</version>
            </dependency>

            <!--      swagger      -->
            <dependency>
                <groupId>io.springfox</groupId>
                <artifactId>springfox-swagger2</artifactId>
                <version>${swagger.version}</version>
                <!--Swagger异常:AbstractSerializableParameter : Illegal DefaultValue null for parameter type integer
                    由于实体类使用@ApiModelProperty时,example属性没有赋值导致的,会进行非空判断
                    解决: 排除后,上传更高版本
                -->

				<!--exclusions标签用于排除关联依赖的引入,因为maven的pom依赖其中有一点是将关联的依赖
				全都引入进来 ,这个标签在这的作用就是,如果关联的依赖和引入的其他依赖可能存在冲突,就必
				须将关联的依赖排除掉,所以就用这个标签
				-->
                <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-annotations</artifactId>
                <version>${swagger.annotations.version}</version>
            </dependency>
            <dependency>
                <groupId>io.swagger</groupId>
                <artifactId>swagger-models</artifactId>
                <version>${swagger.models.version}</version>
            </dependency>

            <dependency>
                <groupId>io.springfox</groupId>
                <artifactId>springfox-swagger-ui</artifactId>
                <version>${swagger.version}</version>
            </dependency>
            <!--       swagger   end     -->

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

            <!--监控sql日志-->
            <dependency>
                <groupId>org.bgee.log4jdbc-log4j2</groupId>
                <artifactId>log4jdbc-log4j2-jdbc4.1</artifactId>
                <version>${log4jdbc.version}</version>
            </dependency>

            <!--    mybatis plus相关    -->
            <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>
            <!--      mybatis plus 代码生成模板引擎      -->
            <dependency>
                <groupId>org.freemarker</groupId>
                <artifactId>freemarker</artifactId>
                <version>${freemarker.version}</version>
            </dependency>
            <!--      mybatis plus      end      -->

            <!--jwt-->
            <dependency>
                <groupId>io.jsonwebtoken</groupId>
                <artifactId>jjwt-api</artifactId>
                <version>${jjwt.version}</version>
            </dependency>
            <dependency>
                <groupId>io.jsonwebtoken</groupId>
                <artifactId>jjwt-impl</artifactId>
                <version>${jjwt.version}</version>
            </dependency>
            <dependency>
                <groupId>io.jsonwebtoken</groupId>
                <artifactId>jjwt-jackson</artifactId>
                <version>${jjwt.version}</version>
            </dependency>

            <!--Java 实体映射工具 —— mapStruct依赖-->
            <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>

            <!--    获取客户端浏览器类型、客户端操作系统、ip地址等信息    -->
            <dependency>
                <groupId>eu.bitwalker</groupId>
                <artifactId>UserAgentUtils</artifactId>
                <version>${UserAgentUtils.version}</version>
            </dependency>

            <!--    获取ip的详细地址    -->
            <dependency>
                <groupId>org.lionsoul</groupId>
                <artifactId>ip2region</artifactId>
                <version>${ip2region.version}</version>
            </dependency>

            <!--    后端图形验证    -->
            <dependency>
                <groupId>com.github.whvcse</groupId>
                <artifactId>easy-captcha</artifactId>
                <version>${captcha.version}</version>
            </dependency>

            <!-- excel工具 -->
            <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>xerces</groupId>
                <artifactId>xercesImpl</artifactId>
                <version>${xercesImpl.version}</version>
            </dependency>

            <!-- AOP面向切面编程框架 -->
            <dependency>
                <groupId>org.aspectj</groupId>
                <artifactId>aspectjrt</artifactId>
                <version>${aspectjrt.version}</version>
            </dependency>

            <!-- Java依赖注入标准 -->
            <dependency>
                <groupId>javax.inject</groupId>
                <artifactId>javax.inject</artifactId>
                <version>${inject.version}</version>
            </dependency>

        </dependencies>
    </dependencyManagement>

    <!--配置maven项目的远程仓库-->
    <repositories>
        <repository>
            <!--远程仓库唯一标识符 -->
            <id>public</id>
            <!--描述 -->
            <name>aliyun nexus</name>
            <!--远程仓库url -->
            <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
            <releases>
                <enabled>true</enabled>
            </releases>
        </repository>
    </repositories>

    <!--配置Maven从什么地方下载插件构件-->
    <pluginRepositories>
        <pluginRepository>
            <id>public</id>
            <name>aliyun nexus</name>
            <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
            <releases>
                <enabled>true</enabled>
            </releases>
            <snapshots>
                <enabled>false</enabled>
            </snapshots>
        </pluginRepository>
    </pluginRepositories>

	<!-- 打包 -->
    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
            <!-- 跳过单元测试 -->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-surefire-plugin</artifactId>
                <configuration>
                    <skipTests>true</skipTests>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>

分析个框架中的pom

在这里插入图片描述

问题1:
核心模块中的pom已经继承公共模块,当它再去继承日志模块(日志模块也继承了公共模块)。此时不是引入两次了吗?或者说日志模块的pom引入的还有其他模块的pom,而此时并不希望引入多余依赖,该怎么办?

当project-A 依赖project-B, project-B 依赖project-D时。如果我们不希望将project-D及其依赖项添加到项目A的类路径中怎么办?因为我们知道存储库中缺少某些Project-D的依赖项(例如Project-E),并且您不需要该功能在Project-B中仍然依赖于Project-D。在这种情况下,Project-B的开发人员可以提供对Project-D的依赖,该依赖为<optional> true </ optional>,如下所示:

<dependency>
  <groupId>sample.ProjectD</groupId>
  <artifactId>ProjectD</artifactId>
  <version>1.0-SNAPSHOT</version>
  <optional>true</optional>
</dependency>

问题2:
依赖版本锁定是怎么回事?

jar包锁定仅仅是对依赖的版本进行锁定,通过<dependencyManagement>标签包裹在</dependencies>标签外面。需要注意的是,锁定不代表引入,这仅仅是对依赖版本的一个局限,需要单独的再去引入。注意:Springboot相关的不需要锁

问题3:
Maven下载配置问题

请参考

问题4:
scope作用域问题

在这里插入图片描述
例如:公共模块(子模块)中引入如下依赖,此时就不得不注释掉<scope>test</scope>,否则在其他子模块引入公共模块时下面的依赖就会被忽略。但是一旦注释掉scope,虽然解决了被忽略的问题,但是会把这个本不必打包的依赖给打包进去。因此最好的解决方案是把下面的依赖放在父工程的pom中去。

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

参考文章

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值