一、了解Maven

  1. 优秀的构建工具 通过简单的命令,能够完成清理、编译、测试、打包、部署等一系列过程。同时,Maven跨平台,无论是在Windows、还是在Linux或Mac上,都可以使用同样的命令。

2. 依赖管理工具 项目依赖的第三方的开源类库,都可以通过依赖的方式引入到项目中来。代替了原来需要首先下载第三方jar,再加入到项目中的方式。从而更好的解决了合作开发中依赖增多、版本不一致、版本冲突、依赖臃肿等问题。

具体是怎么实现的呢?Maven通过坐标系统准确的定位每一个构件,即通过坐标找到对应的java类库。

3. 项目信息管理工具 能够管理项目描述、开发者列表、版本控制系统地址、许可证等一些比较零散的项目信息。除了直接的项目信息,通过Maven自动生成的站点,以及一些已有的插件,还能够轻松获得项目文档、测试报告、静态分析报告、源码版本、日志报告等非常具有价值的项目信息。


二、 Maven与Nexus 这个问题从Maven的第二个用处说起,依赖管理,通过在Pom中指定坐标的形式将jar引入到项目中。那这个过程,要经历怎样一个流程呢?从哪里寻找jar?下载的jar放到哪里?

将这个问题顺下来,就知道nexus和maven的关系了。

从×××到jar?项目用到的jar又存放在哪里?这引出了仓库的概念,maven通过仓库来统一管理各种构件。Maven的仓库分为本地仓库和远程仓库。

当Maven根据坐标寻找构件时,它首先会查看本地仓库,如果本地仓库存在此构件,则直接使用;如果本地仓库不存在此构件,或者需要查看是否有更新的构件版本,Maven会去远程仓库查找,发现需要的构件之后,下载到本地仓库再使用。 项目=>本地仓库=>远程仓库

Nexus是一种远程仓库,根据上段的介绍,我们已经知道远程仓库的作用。在远程仓库中,默认的是中央仓库,中央仓库是Maven核心自带的远程仓库。那就使用中央仓库不就得了吗,为什么我们要安装Nexus呢?

我们从项目实际开发来看: 1.一些无法从外部仓库下载的构件,例如内部的项目还能部署到私服上,以便供其他依赖项目使用。 2. 为了节省带宽和时间,在局域网内架设一个私有的仓库服务器,用其代理所有外部的远程仓库。当本地Maven项目需要下载构件时,先去私服请求,如果私服没有,则再去远程仓库请求,从远程仓库下载构件后,把构件缓存在私服上。这样,及时暂时没有Internet链接,由于私服已经缓存了大量构件,整个项目还是可以正常使用的。同时,也降低了中央仓库的负荷。 所以,Nexus仅仅是私服的一种。


三、 Nexus安装

1.环境:centos7 版本: jdk:jdk-7u45-linux-x64.rpm nexus:nexus-2.14.2-01-bundle.tar.gz maven:apache-maven-3.3.9-bin.tar.gz

2.安装jdk,maven环境配置 配置:

JAVA_HOME=/usr/java/jdk1.7.0_45
JRE_HOME=/usr/java/jdk1.7.0_45/jre
PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin:$M2_HOME/bin
CLASSPATH=$CLASSPATH:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
M2_HOME=/data/apache-maven-3.3.9

export JAVA_HOME JRE_HOME PATH CLASSPATH M2_HOME source /etc/profile

版本查看: java版本: java -version maven版本:mvn --version

3.安装,配置nexus 将下载的nexus-2.14.2-01-bundle.tar.gz包,解压到/data 下 编辑nexus脚本文件 cd /data/nexus/nexus-2.14.2-01/bin

cat nexus
NEXUS_HOME=".."   ##nexus安装目录/data/nexus/nexus-2.14.2-01
RUN_AS_USER=root   ##启动nexus用户

有两个文件: nexus-2.14.2-01:nexus服务 sonatype-work:私有库目录

nexus设置启动服务: sh /data/nexus/nexus-2.14.2-01/bin/nexus

4.访问nexus 登录http://IP:8081/nexus/ 默认用户名和密码:admin admin123


四、 maven命令

Maven构建java项目,Maven工程结构和内容都基于pom.xml。常用的打包命令有mvn package、mvn install、mvn deploy。打包生成jar包或war。但这三者有区别。

  • mvn clean package:依次执行了clean、resources、compile、testResources、testCompile、test、jar等7个阶段。
  • mvn clean install:依次执行了clean、resources、compile、testResources、testCompile、test、jar、install等8个阶段。
  • mvn clean deploy:依次执行了clean、resources、compile、testResources、testCompile、test、jar、install、deploy等9个阶段。

其中clean命令是清理构建项目下的target目标文件,即会删除项目下的target文件目录。项目代码修改后需使用clean清除target,重新生成target。

package命令完成项目编译、单元测试、打包功能,但没有将打好的jar包部署到本地maven仓库和远程私服。 install命令完成项目编译、单元测试、打包功能,把打好的jar包部署到本地maven仓库,但没有部署到远程私服仓库。 deploy命令完成项目编译、单元测试、打包功能,把打好的jar包部署到本地maven仓库,同时也会部署到远程私服仓库。