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 插件:
- Maven-clean-plugin:用于清除项目目录中的垃圾文件和临时文件。
- Maven-compile-plugin:用于编译项目源代码,生成目标代码。
- Maven-dependency-plugin:管理项目依赖关系,可以自动下载依赖库,并解决依赖冲突。
- Maven-jar-plugin:用于打包项目,生成 JAR 文件。
- Maven-javadoc-plugin:用于生成项目 Javadoc 文档。
- Maven-install-plugin:用于安装项目依赖库,可以将依赖库安装到本地仓库中。
- Maven-deploy-plugin:用于部署项目,将项目打包成可执行的包,并上传到远程仓库中。
- Maven-site-plugin:用于生成项目网站,可以自动生成 HTML 文档,并上传到远程仓库中。
- Maven-scm-plugin:用于管理项目版本,可以与版本控制系统集成,实现代码的版本控制。
- 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配置
哎,找到工作在说!