Maven专题

Maven依赖引入原则

1.路径最短优先 a--b--c2.0 和 a--b--x--c2.3 由于a--b--c2.0路径最短,会导入才c2.0依赖

2.相同路径优先声名 a--b--c2.0 a--d--c3.0 如果b在d之前声名,则会引入才c2.0

3.依赖覆盖 后声名的依赖覆盖先前声名的依赖

依赖覆盖

谈谈Maven常用标签

  • groupId: 企业网址反写+项目名
  • artifactId 模块名
  • packaging 打包类型
    • <packaging>pom<packaging>
    • <packaging>jar<packaging>
    • <packaging>war<packaging>
  • parent 子项目继承父项目
  • dependencyManagement 统一定义依赖版本
  • optional 默认false 设置为true会隐藏依赖,不让引入了该pom的其他模块知道我用了这个依赖

pom

父级项目的pom文件的打包方式一定是 <packaging>pom<packaging> ,父级的pom文件只对子模块进行整合,其中还有一个非常重要的标签 <modules>,用来管理子模块。 子模块不能使用pom打包

xml 复制代码
<groupId>com.jingdianjichi</groupId>
<artifactId>jc-club-subject</artifactId>
<packaging>pom</packaging>
<version>1.0-SNAPSHOT</version>
<description>鸡翅club-题目领域服务</description>
<modelVersion>4.0.0</modelVersion>

<modules>
    <module>jc-club-subject-api</module>
    <module>jc-club-application</module>
    <module>jc-club-domain</module>
    <module>jc-club-common</module>
    <module>jc-club-infra</module>
    <module>jc-club-starter</module>
</modules>

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

jar

jar是默认的打包方式

maven build 会将这个项目中的所有java文件都进行编译形成.class文件,打包为一个jar文件

war

与jar类似,但是多了一点:会将项目中依赖的所有jar包都放在WEB-INF/lib这个文件夹下,且jar包变成了war包

spring-boot-dependencies

通过 dependencyManagement 标签预先指定了各个 starter 和其它各个依赖的版本

spring-boot-starter-parent

继承spring-boot-dependencies

#<type>pom</type><scope>import</scope>

适用范围:

一、当一个父项目的pom文件的dependencyManagement标签中需要导入其他pom文件的dependencyManagement时候,两个标签同时使用

二、解决Maven单继承的问题,通过单独使用<type>pom</type>,引入其他pom文件的所有依赖。

一、<type>pom</type><scope>import</scope>同时使用

会导入其他spring-boot-dependencies pom文件中的dependencyManagement所有定义

只会定义一个统一的初始的版本,但是不会真的引入依赖,具体依赖还要在子模块pom文件中引入,但是不用定义版本号(不排除存在未定义版本的依赖,需要自己指定版本)

二、单独使用<type>pom</type>

例如: jc-club-starter模块依赖与jc-club-application-controller模块

<exclusions>依赖排除

不需要写版本

optional

project1引入了springbootssm工程

springbootssm工程的spring-boot-starter-web依赖的optional设置为true,project1就看不到了

依赖范围 Scope标签取值

例如:scope为provided的依赖,比如 lombok、mybatis-plus等,只作用于编译阶段,编译完成就没用了,打包时没必要一起打包。

可以用以下方式排除

xml 复制代码
<build>
    <finalName>${project.artifactId}</finalName>
    <!--打包成jar包时的名字-->
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
            <version>2.3.0.RELEASE</version>
            <configuration>
                <excludes>
                    <exclude>
                        <groupId>com.fasterxml.jackson.core</groupId>
                        <artifactId>jackson-databind</artifactId>
                    </exclude>
                </excludes>
            </configuration>

Maven生命周期

每一个任务都对应一个插件

常用的 Maven 插件:

  1. Maven-clean-plugin:用于清除项目目录中的垃圾文件和临时文件。
  2. Maven-compile-plugin:用于编译项目源代码,生成目标代码。
  3. Maven-dependency-plugin:管理项目依赖关系,可以自动下载依赖库,并解决依赖冲突。
  4. Maven-jar-plugin:用于打包项目,生成 JAR 文件。
  5. Maven-javadoc-plugin:用于生成项目 Javadoc 文档。
  6. Maven-install-plugin:用于安装项目依赖库,可以将依赖库安装到本地仓库中。
  7. Maven-deploy-plugin:用于部署项目,将项目打包成可执行的包,并上传到远程仓库中。
  8. Maven-site-plugin:用于生成项目网站,可以自动生成 HTML 文档,并上传到远程仓库中。
  9. Maven-scm-plugin:用于管理项目版本,可以与版本控制系统集成,实现代码的版本控制。
  10. Maven-release-plugin:用于发布项目,可以将项目打包成可执行的包,并上传到远程仓库中,同时发布版本更新信息。

install的理解:若a项目依赖于b项目,b如果只是package,b.jar仅仅只是打包到了b项目的target目录,使用install命令则是将bjar包安装到了本地仓库,这样a就可以使用b的jar包了。

Maven打包

spring-boot-maven-plugin插件

使用脚手架时,会自动带有 spring-boot-maven-plugin插件

xml 复制代码
<build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.8.1</version>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                    <encoding>UTF-8</encoding>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <version>${spring-boot.version}</version>
                <configuration>
                    <mainClass>com.swjtu.pyc.springbootssm.SpringbootssmApplication</mainClass>
                    <skip>true</skip>
                </configuration>
                <executions>
                    <execution>
                        <id>repackage</id>
                        <goals>
                            <goal>repackage</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>
    
    标签解释:
<!--execution元素包含了插件执行需要的信息 -->  
<!--goals配置的执行目标 -->  

    7个maven goal
    
-   `build-image: 将程序使用 buildpack 打包进容器镜像中。
-   `build-info:生成项目的构建信息文件
-   `help:显示帮助信息。
-   `repackage:生成可执行的jar包或war包。核心goal。
-   `run:运行 Spring Boot 应用
-   `start:在集成测试阶段,控制生命周期
-   `stop:在集成测试阶段,控制生命周期

作用:

spring-boot-maven-plugin插件,会将依赖的jar包全部打包进去。该文件包含了所有的依赖和资源文件,可以直接在命令行或者传统的 Java Web 服务器上启动运行。

直接通过java -jar 包名 就可启动

Maven版本

<version>1.0-SNAPSHOT</version> SNAPSHOT表示快照版本,开发中
<version>1.0-RELEASE</version> RELEASE表示稳定版

Nexus配置

哎,找到工作在说!

相关推荐
cjy00011122 分钟前
springboot的 nacos 配置获取不到导致启动失败及日志不输出问题
java·spring boot·后端
小江的记录本1 小时前
【事务】Spring Framework核心——事务管理:ACID特性、隔离级别、传播行为、@Transactional底层原理、失效场景
java·数据库·分布式·后端·sql·spring·面试
sheji34161 小时前
【开题答辩全过程】以 基于springboot的校园失物招领系统为例,包含答辩的问题和答案
java·spring boot·后端
程序员cxuan1 小时前
人麻了,谁把我 ssh 干没了
人工智能·后端·程序员
wuyikeer3 小时前
Spring Framework 中文官方文档
java·后端·spring
Victor3563 小时前
MongoDB(61)如何避免大文档带来的性能问题?
后端
Victor3563 小时前
MongoDB(62)如何避免锁定问题?
后端
wuyikeer4 小时前
Spring BOOT 启动参数
java·spring boot·后端
子木HAPPY阳VIP4 小时前
Ubuntu 22.04 VMware 设置固定IP配置
人工智能·后端·目标检测·机器学习·目标跟踪
人间打气筒(Ada)5 小时前
如何基于 Go-kit 开发 Web 应用:从接口层到业务层再到数据层
开发语言·后端·golang