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配置

哎,找到工作在说!

相关推荐
追逐时光者2 小时前
推荐 12 款开源美观、简单易用的 WPF UI 控件库,让 WPF 应用界面焕然一新!
后端·.net
Jagger_2 小时前
敏捷开发流程-精简版
前端·后端
苏打水com3 小时前
数据库进阶实战:从性能优化到分布式架构的核心突破
数据库·后端
间彧4 小时前
Spring Cloud Gateway与Kong或Nginx等API网关相比有哪些优劣势?
后端
间彧4 小时前
如何基于Spring Cloud Gateway实现灰度发布的具体配置示例?
后端
间彧4 小时前
在实际项目中如何设计一个高可用的Spring Cloud Gateway集群?
后端
间彧4 小时前
如何为Spring Cloud Gateway配置具体的负载均衡策略?
后端
间彧4 小时前
Spring Cloud Gateway详解与应用实战
后端
EnCi Zheng6 小时前
SpringBoot 配置文件完全指南-从入门到精通
java·spring boot·后端
烙印6016 小时前
Spring容器的心脏:深度解析refresh()方法(上)
java·后端·spring