一、了解Maven
- 优秀的构建工具
通过简单的命令,能够完成清理、编译、测试、打包、部署等一系列过程。同时,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.一些无法从外部仓库下载的构件,例如内部的项目还能部署到私服上,以便供其他依赖项目使用。
- 为了节省带宽和时间,在局域网内架设一个私有的仓库服务器,用其代理所有外部的远程仓库。当本地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仓库,同时也会部署到远程私服仓库。