本文是学习项目管理利器——maven的Maven知识点速查
前置知识:无
Maven常用命令
- compile 编译src/main/java文件
- test 运行src/test/java下的带@Test的测试文件
- package 打包src/main/java到target目录下生成jar包
- install 打包并把jar包拷贝到本地仓库.m2下
- deploy 打包并把jar包拷贝发布到远程仓库
Maven命令行创建目录骨架
- mvn archetype:generate
Maven中的坐标和仓库
- 构件通过坐标作为ID
- 坐标包含
- groupId
- artifactId
- Version
- 仓库:
- 本地仓库
- 远程仓库
Maven生命周期和插件
生命周期:是一种工程的抽象
- clean 清理
- pre-clean
- clean
- post-clean
- default 构建(最核心)
- compile
- test
- package
- install
- site 生成站点
- pre-site
- post-site
- site-deploy 发布站点
插件:是对生命周期的实现
使用插件
<build>
<plugins>
<groupId>xxx</groupId>
<artifactId>xxx</artifactId>
<version>xxx</version>
<executions>
<phase>package</phase> <!-- 生命周期那个阶段 -->
<goals>
<goal>jar-no-fork</goal><!--做什么事-->
</goals>
</executions>
</plugins>
</build>
Maven的pom.xml结构的解析
<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/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion> <!--固定搭配 -->
<groupId>反写的公司网址+项目名</groupId> <!-- 坐标 -->
<artifactId>项目名+模块名(项目中的一个模块)</artifactId>
<packaging>jar</packaging> <!-- 打包,jar、war、zip、pom -->
<version>1.0-SNAPSHOT</version>
<!-- 0.x.x 表示大版本
x.0.x 分支版本
x.x.0 小版本
0.0.1snapshot 快照
alpha 内测
beta 公测
release 稳定
GA 正式发布 -->
<name></name> <!--文档用-->
<url></url> <!-- 项目地址 -->
<description></description>
<developers></developers>
<lincences></lincences>
<organization></organization>
<denpendencies>
<denpendency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.2.RELEASE</version>
<type></type>
<scope>test</scope>
<optional></optional> <!-- 设置依赖是否可选 -->
<exclusions><!-- 排除依赖,比如A->B->C,而A不想依赖C -->
<exclusion>
</exclusion>
</exclusions>
</denpendency>
</denpendencies>
<!-- 依赖管理,用在父模块中供继承用, -->
<dependencyManagement>
<denpendencies>
<dependency></dependency>
</denpendencies>
</dependencyManagement>
<build>
<!-- 插件列表 -->
<plugins>
<plugin>
<groupId></groupId>
<artifactId></artifactId>
<version></version>
</plugin>
</plugins>
</build>
<!-- 继承 -->
<parent></parent>
<!-- 模块 -->
<modules>
<module>
</module>
</modules>
Maven依赖范围
<scope>test</scope>
- compile 默认编译和运行都有效
- test 测试
- runtime 运行和测试时有效
- provided 编译和测试有效
- import 只用在dependencyManagement中,表示从其他pom导入dependency的配置
Maven依赖传递
A->B->C,则A间接依赖C,A中会引入C的jar包,可以排除依赖用<exclusion></exclusion>,则C不见了
Maven依赖冲突,则看规则
- 短路优先
- A->B->C-X(jar) 不选这条
- A->D->X(jar) ✅
- 先声明先优先:如果路径长度相同,则谁先声明,先解析谁
Maven的聚合和继承
聚合:<modules></modules>
继承:<parent></parent>
Maven的构建web项目
在<plugin>里使用坐标标记的jetty或tomcat插件
关于我:
linxinzhe,全栈工程师,目前供职于某500强通信企业。人工智能,区块链爱好者。
GitHub:https://github.com/linxinzhe
欢迎留言讨论,也欢迎关注我~
我也会关注你的哦!
网友评论