Maven 笔记
maven 项目常用结构
src
-main
-java
-package
-test
-java
-package
resources
maven 常用命令
maven -v 查看maven版本
maven compile 编译
maven test 测试
maven package 打包
maven clean 删除target
maven install 安装jar包到本地仓库
maven archetype:generate 按照提示创建目录
maven archetype:generate -DgroupID=组织名称(公司网址反写+项目名) -DartifactId=项目名-模块名 -Dversion=版本号 -Dpackage=代码所存在的包名
版本号命名习惯:
第一个0表示大版本号,第二个0表示分支版本号,第三个0表示小版本号。(0.0.1)
snapshot 快照版本, alpha 内部测试版本, alpha 公测版本, Release 稳定版本, GA 正式发布版本
eg:0.0.1snapshot
maven 概念
坐标
仓库(本地仓库和远程仓库)
镜像仓库
maven 生命周期
clean 清理项目
pre-clean 执行清理前的工作
clean 清理上一次构建生成的所有文件
post-clean 执行清理后的文件
default 构建项目(最核心)
compile 编译
test 测试
package 打包
install 安装
site 生成项目站点
pre-site 在生成项目站点前要完成的工作
site 生成项目的站点文档
post-site 在生成项目站点后要完成的工作
site-deploy 发布生成的站点到服务器上
POM.xml 文件元素介绍
<project>
<modelVersion>当前pom版本</modelVersion>
<groupId>反写公司网址+项目名</groupId>
<artifactId>项目名+模块名</artifactId>
<version>版本号</version>
<packaging>打包方式,默认jar</packaging>
<name>项目描述名</name>
<url>项目地址</url>
<description>项目描述</description>
<developers>开发人员</developers>
<licenses>许可证</licenses>
<organization>组织信息</organization>
//依赖列表
<dependencies>
<dependency>
<groupId></groupId>
<artifactId></artifactId>
<version></version>
<type></type>
<scope>依赖范围(6种)
compile:默认范围,编译、测试、运行时都有效;
provided:编译、测试时有效;
runtime:测试、运行时有效;
test:只在测试时有效(Junit);
system:编译、测试时有效,与本机系统相关联,可移植性差;
import:导入的范围,只在dependencyManagement中,表示从其他pom中导入dependency的配置。
</scope>
<optional>设置依赖是否可选</optional>
<exclusions>//排除列表
<exclusion></exclusion>
</exclusions>
</dependency>
</dependencies>
//依赖管理,作为父类抽象子类继承,不会直接编译
<dependencyManagement>
<dependencies>
<dependency></dependency>
</dependencies>
</dependencyManagement>
<build>
//插件列表
<plugins>
<plugin>
<groupId></groupId>
<artifactId></artifactId>
<version></version>
</plugin>
</plugins>
</build>
<parent>继承父类</parent>
<modules>用于聚合多个模块一起编译
<module><module>
</modules>
</project>
依赖相关问题
依赖传递
多个项目传递依赖时,依赖的上层模块必须编译compile和安装install到本地仓库,依赖的下层模块才能正常编译。
依赖冲突
短路优先
A -> B -> C -> X(1)
A -> D -> X(2)
上述两种情况,A模块依赖X的第二个版本。
先声明优先
A -> B -> X(1)
A -> D -> X(2)
上述情况,由于依赖路径长度相同,则看A中pom文件dependency中B和D声明的位置,如果B先声明,则A依赖X的第一个版本,反之依赖第二个版本。