构建工具:通过简单的命令,能够完成清理、编译、测试、打包、部署等一系列过程。同时,不得不提的是,Maven是跨平台的,无论是在Windows、还是在Linux或Mac上,都可以使用同样的命令。
项目依赖的第三方的开源类库,都可以通过依赖的方式引入到项目中来。代替了原来需要首先下载第三方jar,再加入到项目中的方式。从而更好的解决了合作开发中依赖增多、版本不一致、版本冲突、依赖臃肿等问题。
项目信息管理工具:能够管理项目描述、开发者列表、版本控制系统地址、许可证等一些比较零散的项目信息。除了直接的项目信息,通过Maven自动生成的站点,以及一些已有的插件,还能够轻松获得项目文档、测试报告、静态分析报告、源码版本、日志报告等非常具有价值的项目信息。
这个问题从Maven的第二个用处说起,依赖管理,通过在Pom中指定坐标的形式将jar引入到项目中。那这个过程,要经历怎样一个流程呢?从哪里寻找jar?下载的jar放到哪里?
将这个问题顺下来,就知道nexus和maven的关系了。
从哪里找到jar?项目用到的jar又存放在哪里?这引出了仓库的概念,maven通过仓库来统一管理各种构件。Maven的仓库分为本地仓库和远程仓库。
当Maven根据坐标寻找构件时,它首先会查看本地仓库,如果本地仓库存在此构件,则直接使用;如果本地仓库不存在此构件,或者需要查看是否有更新的构件版本,Maven会去远程仓库查找,发现需要的构件之后,下载到本地仓库再使用。
到了这里,问题的答案也就出来了。
首先,Nexus是一种远程仓库,根据上段的介绍,我们已经知道远程仓库的作用。在远程仓库中,默认的是中央仓库,中央仓库是Maven核心自带的远程仓库。那就使用中央仓库不就得了吗, 为什么我们要安装Nexus呢?
我们从项目实际开发来看:
Nexus仅仅是私服的一种。
在centos7系统安装maven很简单,直接使用yum安装就可以,不过在安装maven之前首先要配置系统的 JDK (java)环境。春雨使用ansible进行部署,对应的role是 maven 。
$ cat maven.yml --- - hosts: ucloud gather_facts: False roles: - role: maven
$ ansible-playbook maven.yml
官方建议 服务器硬件配置:
Java和maven在上面的过程已安装,接下来只需要安装npm,步骤如下:
# 安装之前先创建对应的目录 $ mkdir /home/node $ cd /home/node # 使用nodejs管理npm $ wget https://nodejs.org/dist/v8.12.0/node-v8.12.0-linux-x64.tar.xz # 解压 $ tar Jxvf node-v8.12.0-linux-x64.tar.xz $ mv node-v8.12.0-linux-x64 nodejs # 加入系统环境 $ ln -s /home/node/nodejs/bin/node /usr/bin/node $ ln -s /home/node/nodejs/bin/npm /usr/bin/npm # 升级npm $ npm install npm@latest -g
$ cd /usr/local/ $ wget https://download.sonatype.com/nexus/oss/nexus-2.13.0-01-bundle.tar.gz $ tar xvzf nexus-2.13.0-01-bundle.tar.gz $ ln -s nexus-2.13.0-01 nexus ## nexus-2.13.0-01:应用目录 ## sonatype-work:数据目录,存放所有的repo # 启动 $ cd /usr/local/nexus/bin/ $ ./nexus start **************************************** WARNING - NOT RECOMMENDED TO RUN AS ROOT **************************************** If you insist running as root, then set the environment variable RUN_AS_USER=root before running this script. $ vim /usr/local/nexus/bin/nexus RUN_AS_USER=root $ ./nexus start **************************************** WARNING - NOT RECOMMENDED TO RUN AS ROOT **************************************** Starting Nexus OSS... Started Nexus OSS. $ tail -f /usr/local/nexus/logs/wrapper.log
启动成功后在浏览器访问(localhost:8081/nexus/): http://192.168.228.130:8081/nexus/ ,进入web界面
使用管理员用户登录,账号:admin 密码:admin123。如果使用sonatype管理用户和密码,可以通过设置——change password来更改密码,如果集成了ldap用户,则无法通过此方法更改密码。
系统优化:
sonatype需要配置系统文件描述符数量为 65536,配置方法如下:
# 查看当前系统可打开文件描述符数量 $ ulimit -n # 修改文件描述符数量 ## 临时修改 $ ulimit -n 65535 ## 永久修改 $ vim /etc/security/limits.conf nexus - nofile 65536
如果 加入了systemd管理 nexus,上述方法是不生效的,配置方法如下:
# 加入systemd管理 $ vim /usr/lib/systemd/system/nexus.service [Unit] Description=nexus service After=network.target [Service] Type=forking LimitNOFILE=65536 ExecStart=/usr/local/nexus/bin/nexus start ExecStop=/usr/local/nexus/bin/nexus stop Restart=on-abort [Install] WantedBy=multi-user.target
管理nexus服务:
$ systemctl daemon-reload $ systemctl start nexus
更改maven配置 编辑maven的settings.xml文件,更改mirror、profile、activeProfiles模块的内容如下:
$ vim /etc/maven/settings.xml <settings> <mirrors> <mirror> <!--This sends everything else to /public --> <id>nexus</id> <mirrorOf>*</mirrorOf> <url>http://localhost:8081/repository/maven-proxy/</url> </mirror> </mirrors> <profiles> <profile> <id>nexus</id> <!--Enable snapshots for the built in central repo to direct --> <!--all requests to nexus via the mirror --> <repositories> <repository> <id>central</id> <url>http://central</url> <releases><enabled>true</enabled></releases> <snapshots><enabled>true</enabled></snapshots> </repository> </repositories> <pluginRepositories> <pluginRepository> <id>central</id> <url>http://central</url> <releases><enabled>true</enabled></releases> <snapshots><enabled>true</enabled></snapshots> </pluginRepository> </pluginRepositories> </profile> </profiles> <activeProfiles> <!--make the profile active all the time --> <activeProfile>nexus</activeProfile> </activeProfiles> </settings>
进入web,配置nexus:
在项目中调用(pom.xml): http://maven.apache.org/guides/mini/guide-mirror-settings.html
https://www.sonatype.com/
https://help.sonatype.com/repomanager2
http://www.mdslq.cn/archives/d406f18d.html