# Maven安装配置

## 1. maven介绍

Maven 是一个项目管理和整合工具。Maven 为开发者提供了一套完整的构建生命周期框架。开发团队几乎不用花多少时间就能够自动完成工程的基础构建配置，因为 Maven 使用了一个标准的目录结构和一个默认的构建生命周期。

Maven 能够帮助开发者完成以下工作：

* 构建
* 文档生成
* 报告
* 依赖
* SCMs
* 发布
* 分发
* 邮件列表

总的来说，Maven 简化了工程的构建过程，并对其标准化。它无缝衔接了编译、发布、文档生成、团队合作和其他任务。Maven 提高了重用性，负责了大部分构建相关的任务。

## 2. linux下maven的安装

```
# 进入用户目录
cd ~
# 通过wget下载tar包
wget http://apache.mirrors.pair.com/maven/maven-3/3.5.4/binaries/apache-maven-3.5.4-bin.tar.gz
# 解压tar包
tar -zxvf apache-maven-3.5.4-bin.tar.gz 
# 配置全局环境变量
vim /etc/profile
# 添加
export MAVEN_HOME=/home/wangjun/apache-maven-3.5.4
export MAVEN_HOME
export PATH=$PATH:$MAVEN_HOME/bin
# 使profile生效
source /etc/profile
# 查看maven版本
mvn -version

Apache Maven 3.5.4 (1edded0938998edf8bf061f1ceb3cfdeccf443fe; 2018-06-18T02:33:14+08:00)
Maven home: /home/wangjun/apache-maven-3.5.4
Java version: 1.7.0_95, vendor: Oracle Corporation, runtime: /usr/lib/jvm/java-7-openjdk-amd64/jre
Default locale: en_US, platform encoding: UTF-8
OS name: "linux", version: "3.13.0-32-generic", arch: "amd64", family: "unix"
# 结束！
```

或者

```
sudo apt-get install maven
```

## 3. Maven常用命令

### 1. 查看maven依赖

```
mvn dependency:tree
# 输出到指定文件
mvn dependency:tree -Doutput=tree.log
# 查看全部的依赖
mvn dependency:tree -Dverbose
# 分析没有用到的依赖
mvn dependency:analyze
# Used undeclared dependencies found：指的是用到的没有直接引用的依赖，比如在业务代码里用到了A.jar依赖的B.jar。这里A.jar是直接依赖的，B.jar是A.jar直接依赖的。
# Unused declared dependencies found：这个是指我们在pom中声明了依赖，但是在实际代码中并没有用到这个包。这里说的实际代码没有用到，指的是在main/java和test里没有用的，但是并不是意味着真的没有用到这些包，有可能配置文件中引用或者其他扩展点自动加载这些包，所以我们在删除依赖的时候一定要小心，做好备份，因为这类引用maven是分析不出来的。
```

### 2. 本地构建相关

```
mvn package    生成target目录，编译、测试代码，生成测试报告，生成jar/war文件
mvn compile    编译
mvn install    编译，打包，安装包至本地仓库，以备本地的其它项目作为依赖使用
mvn test       编译并测试
mvn clean      清空生成的文件
mvn site       生成项目相关信息的网站
-DskipTests    不执行测试用例，但编译测试用例类生成相应的class文件至target/test-classes下。
-Dmaven.test.skip=true   不执行测试用例，也不编译测试用例类。
```

### 3. 安装jar包到远程仓库

```
mvn deploy
```

> 参考：<https://blog.csdn.net/u014515854/article/details/80407024>


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://jun-wang.gitbook.io/learnjava/ji-shu-xue-xi/web-zhong-jian-jian-xue-xi/maven-an-zhuang-pei-zhi.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
