Maven学习笔记
一、Maven
1.1 Maven简介
1.1.1 传统项目导入jar包
- 下载jar包
- 将下载的jar包拷贝到项目中(WEB-INF/lib)
- 选择jar文件-> 右键-> Add as Livrary
传统方式存在问题:步骤多、不同的项目中需要相同jar包时,需要分别存储、在不同环境下可能因为jar文件版本不同导致项目无法运行
1.1.2 传统项目生命周期管理
IDE提供了一键构建项目的功能,但我们无法干预具体项目生命周期过程(清理缓存、校验、编译、测试、打包、安装、部署),不同的IDE项目结构不同,导致移植性差
1.1.3 Maven简介
Maven是一个
基于项目对象模型(POM)用于进行项目的依赖管理、生命周期管理的
工具软件
核心功能
- 项目的依赖管理
- 项目生命周期管理
- 聚合工程
1.2 Maven安装与配置
1.2.1 Maven下载
1.2.2 Maven安装
开箱即用,无需安装
- 解压压缩包
- 解压后的目录结构
bin 存放指令文件
boot 包含类加载框架jar
conf 包含maven核心配置文件setting.xml
lib 包含maven运行所需的jar文件 - 配置环境变量
path中添加解压后的bin目录
1.2.3 Maven配置
maven的conf目录中的
setting.xml
,是maven的核心配置文件
仓库 |
---|
- 本地仓库配置
本地仓库中会存储项目依赖的文件
在setting.xml中添加如下标签,可配置本地仓库路径,如果不配置默认存储在C:\Users\username\.m2\repository
<localRepository>D:/local/repo</localRepository>
- 远程仓库及其配置
中央仓库
Maven中央仓库是由maven社区提供的仓库,无需配置,maven中内置了中央仓库的地址
中央仓库地址:http://repo.maven.apache.org/maven2/
公共仓库
除中央仓库外,还有其他远程仓库。比如aliyun仓库(http://maven.aliyun.com/nexus/content/groups/public/)
中央仓库在国外,一般选择国内的公共仓库代替,下面的示例为在setting.xml中配置阿里云仓库
<mirrors>
<mirror>
<id>aliyun</id>
<mirrorOf>central</mirrorOf>
<name>Nexus aliyun</name>
<url>http://maven.aliyun.com/nexus/content/groups/public</url>
</mirror>
</mirrors>
私服
公司可配置一个不对外开放的仓库 可以用Nexus搭建
- JDK配置
限定maven项目默认的jdk版本
<profiles>
<profile>
</profile>
</profiles>
<activeProfiles>
<activeProfile>alwaysActiveProfile</activeProfile>
</activeProfiles>
1.3 Maven的项目结构
1.3.1 Maven的项目结构
projectName(项目名称)
--src
--main(存放项目源文件)
--java
--resources
--text(存放项目单元测试代码)
--pom.xml
1.3.2 pom.xml
POM(Project Object Model)maven可以更具pom文件的配置对此项目进行依赖管理
<?xml version='1.0' encoding='utf-8'?>
<!--project中添加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/xsd/maven-4.0.0.xsd">
<!--指定项目模型版本-->
<modelVersion>4.0</modelVersion>
<!--指定项目的标识 G 组织标识 A项目标识 V版本标识-->
<groupId>com.jdsm</groupId>
<artifact>personPro</artifact>
<version>1.0.0</version>
<!--配置当前项目的依赖
在https://mvnrepository.com/中
找到依赖坐标添加到denpendencies中即可
示例中为gson的依赖
可以通过scope指定当前依赖的使用范围,一般只用测试,或不写(不写标识贯穿整个生命周期)
test标识只在项目测试阶段引入当前依赖(编译、测试)
runtime标识只在项目运行阶段引入当前依赖(运行、测试运行)
provided在 (编译、测试、运行)
compile 在(编译、测试、运行、打包)
-->
<dependencies>
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.9.0</version>
<scope>test</scope>
</dependency>
</dependencies>
</project>
1.4 依赖管理
- 在pom.xml中配置依赖
- maven读取项目中的pom.xml
- 检查本地仓库中是否有所依赖的jar,有则直接引入项目中
- 如果本地仓库没有项目所需依赖,则连接远程仓库进行下载(需要有网络)
1.5 项目生命周期管理
- 清理缓冲 mvn clean
- 检查 mvn check
- 编译 mvn compile
- 测试 mvn test
- 打包 mvn package
- 安装 将所到的包安装到本地maven目录 mvn install
- 部署 将项目生产的包发布到外部服务器仓库,以供其他开发人员共享 mvn deploy
1.6 IDEA使用Maven
1.6.1 IDEA关联Maven
File->Settings 中关联当前项目Maven,File->OthersSettings 是为以后所有项目关联Maven |
---|
说明:IDEA本身集成了Maven,考虑到IDEA和Maven版本的兼容性,idea不建议配置比默认版本更新的版本,建议使用Idea自带的Maven |
1.6.2 创建Maven项目
Java项目 |
---|
Web项目 |
创建web项目同创建java项目,在java项目的基础上增加WEB-INF->web.xml |
在pom.xml中设置打包方式为war |
配置web组件 |
部署web项目 |
1.7 私服
企业内部搭建的Maven仓库
- 开发者需要依赖直接从私服下载
- 私服可以实现企业内部依赖的共享,当企业开发了一个通用插件(jar),可以发布到私服,其他开发者就可以共享此插件
1.7.1 私服架构
有无私服对比 |
---|
1.7.2 Nexus 下载安装运行
Maven 仓库管理软件可以搭建私服,如:Apache archiva,Artifactory,Sonatype Nexnus。这里使用Sonatype Nexnus搭建
- 官网地址:https://www.sonatype.com/
- 下载地址:https://www.sonatype.com/products/nexus-repository?topnav=true
- 下载nexus-2.x-bundle.zip 解压即可
nexus安装目录 |
---|
点击进入nexus-2.*\bin 目录,用管理员身份打开cmd执行命 |
1.nexus install 2.nexus uninstall 3.nexus statrt 4.nexus stop |
1.7.3 Nexus 登录
登录私服管理器地址: http://localhost:8081/nexus
账号:admin
密码:admin123
1.7.4 私服仓库列表
仓库类型 | 描述 |
---|---|
group | 包含多个仓库,通过group地址可以从包含的多个仓库中找构建 |
host | 私服服务器 本地的仓库 |
proxy | 代理仓库 如aliyun仓库 |
仓库名 | 描述 |
---|---|
Releases | 存放项目的稳定发布版本 |
Snapshots | 临时发布版本 |
3rd party | 存放中央仓库没有,可以上传私服的该库中 |
1.7.5 私服仓库组的配置
为达到当私服仓库没有时去其他仓库回去依赖jar目的,所以需要配置私服仓库组
+将私服Releases配置第一位
+将私服Snapshots配置第二位
+将公共仓库Central配置第三位
1.7.6 Maven配置私服
在maven中配置私服,便可以从私服上获取jar包及其依赖
setting.xml中配置如下 |
---|
1.7.7 激活私服配置
在settings.xml的activeProfiles中激活对应的profile->id 中的私服ID |
---|