Maven的简单介绍、centos7搭建nexus2私服
目录
在maven配置文件settings.xml的servers配置私服的认证。
前言
以前没使用maven那会,开发项目都是网上导出找jar包,什么官方下载,没镜像的中央仓库(网速差的两批),别人共享的百度云,CSDN的收费资源等等,各种手段也是收集了一堆jar。然鹅开发有时还是会有jar包冲突,版本不对等等情况,着实让人烦躁。
使用maven 的好处有:节省外网宽带,都是内网的仓库;加速maven工程构建,内网速度快;部署获取第三方构件,还有部署公用jar包业务包等。
什么是maven
需求促进市场,maven自然就有大佬研发出来了。与其说是一种技术,不如说是一种理念和思维一种解决问题的方式,maven就是一种具体的实现和完善。
Maven是一套项目管理工具,比如jar包的统一管理,构建应用工程的编译打包部署,还可以开发自定义插件,来方便自己的习惯操作。
很方便的使用依赖包(构件)
使用POM文件来管理项目依赖的jar包,通过GAV来定位一个jar,安装完maven配置一下,使用的时候它就会自动帮你下载jar包,你只需要给他一个GAV。
解决项目间的依赖关系,比如项目A需要项目B的一个功能类,只需要在A项目的POM中通过GAV引入即可引用B项目的功能,打包的时候它自动会帮你把项目B的jar包弄进去。
Maven构建大型项目
在创建一个大型项目的时候,可以通过maven将项目分割成几个子模块(项目),比如一个电商项目==》订单管理系统,支付管理系统,用户管理,公共类,然后创建一个类型为POM的父类,使用modules标签来包裹几个子模块,父类只负责统一构件的版本号(spring、jdk、tomcat、编码和一些公共的构件包)。
Maven生命周期
Maven 的生命周期符合大部分软件工程的构建过程,使用maven执行项目构建的时候,按照:clean、compile、test、package、install、deploy,当然这只是其中一些主要的命令,它实际执行还包括一些预清理 后清理 预编译 校验等等操作。
- Clean清除上一次构建项目生成的文件
- Compile编译项目
- Test执行测试单元的代码
- Package打包,这个是会把项目打jar/war/pom包放到你项目的target目录下(默认)
- Install安装,这个会把你打的包放到你本地的仓库中,安装maven后可以在settings.xml文件中修改本地仓库目录(默认${user.home}/.m2/repository )
- Deploy发布,将打包好的构件(jar包 war包等)发布到远程仓库,这个需要配置,下面会讲。
网络姿势
Maven的创始人是Jason Van Zyl,诞生时间大概在2001年3月。Maven起源于Jakarta Alexandria项目,在2002年10月份左右Maven迁移到Turbine项目中继续发展,
最后是被纳入阿帕奇(Apache)的一个开源项目,供开发者免费下载使用。
本地仓库、远程仓库(私服仓库,中央仓库,第三方仓库)的区别
- 本地仓库,就是你安装完默认的一个目录,默认${user.home}/.m2/repository(我的windows就是C:\Users\DELL\.m2\repository)
- 私服仓库,就是你自己的服务器搭建的仓库(你也可以在你电脑用nexus装一个私服),一般公司的私服都是在自己内网,开发人员把公共的jar包放到私服来共用。
- 中央仓库,maven默认使用的远程仓库,具有权威性的,地址在国外所以有时候很慢(使用阿里云镜像来解决)
- 第三方仓库,就是别人的私服,在你这里就是第三方仓库。同样道理,你的私服也是别人的第三方仓库。
settings.xml配置文件
主要介绍下3个标签,server、mirror、repository
- server,用于配置私服的认证信息,参考第8点,用于发布构件到私服。
- mirror,仓库的镜像映射,基于规则对仓库repository进行匹配覆盖。
- repository,远程仓库配置,方便我们从私服下载构件。
有以下规则:
- 在mirrorOf与repository的id相同的时候优先是使用mirror的地址
- mirrorOf等于*的时候覆盖所有repository配置
- 存在多个mirror配置的时候mirrorOf为*的放到最后
- 只配置mirrorOf为central的时候可以不用配置repository(默认覆盖中央仓库)
- repositories标签下可以配置多个repository,如果我们配置了多个repository,maven会用哪个呢,答案是按出现顺序使用,如果第1个可用,就用第一个,如果不可用,就依次往下找。
私服搭建
nexus下载,上传,解压缩
- 地址:Nexus Repository OSS - Software Component Management | Sonatype(反正我是打不开,用的别人网盘下的)不过内容配置啥的都差不多。建议使用nexus3版本的;
- 将压缩包nexus-2.14.4-03-bundle.tar.gz上传到linux服务器;
- 我这里是解压到/usr/local 目录下tar -zxvf nexus-2.14.4-03-bundle.tar.gz -C /usr/local
我这里建立了一个软连接nexus方便使用,对应的是安装目录nexus-2.14.5-02
修改运行文件
在安装目录里的bin目录下编辑nexus文件 vi nexus,将运行用户改为root,RUN_AS_USER=root,安装路径改为你自己的NEXUS_HOME=””。
修改配置文件
在conf目录vi nexus.properties 可以修改默认端口,工作目录一般不用改。改完保存退出。
启动nexus服务 ./nexus start
相关的命令: ./nexus {start|stop|run|run-redirect|status|restart|force-reload},这里start和run都是启动命令。start是后台启动,可以挂到后台运行,run是实时启动的可以看到启动日志。
服务状态可以执行./nexus status查看是否启动成功,然后浏览器打开http://11.11.11.11:8081/nexus 你的服务器ip加默认端口8081,默认登录账号密码admin/admin123
浏览器无法访问私服?
1. 查看防火墙是否开启了,firewalld和iptables二者都属于防火墙管理规则,可以先查看两者是否都开启了,再单个排查
- 检查firewalld:参考https://www.cnblogs.com/qingchengshiguang/p/12101990.html
- 检查iptables是否开启了端口限制,状态:service iptables status
编辑开放端口号文件:vi /etc/sysconfig/iptables
添加允许端口: -A INPUT -m state --state NEW -m tcp -p tcp --dport 8081 -j ACCEPT
保存:service iptables save
重启:service iptables restart
2. 检查阿里云服务器是否已经把8081端口加入安全组(入口)
私服仓库介绍
点击左边Repository仓库,可以看到右边已有的仓库
仓库类型
- hosted:本地仓库,通常我们只能将本地构件包部署到这一类型仓库
- proxy: 代理仓库,用来代理远程公共仓库,如maven中央仓库
- group: 仓库组,是多个仓库的集合,当我们的依赖在多个仓库时只需要将多个仓库配置到仓库组,然后在本地maven的repository配置这个仓库组的地址即可,而不需要同时写多个repository
常用仓库
- Public Repositories仓库组
将多个仓库组合起来一起使用,只需引入一个仓库组地址即可享用多个仓库资源。左边是已加的仓库,右边是可用仓库(需要就把右边-挪到-左边 )
- 3rd party:第三方仓库,一般用于中央仓库找不到的依赖或公用的依赖包。
- release:发布仓库,通常用于部署稳定版本的依赖构件,生产环境使用。
- snapshots:快照仓库,通常用于开发测试时部署使用,版本更新较快。
仓库配置记得将Deployment Policy设置为Allow Redeploy不然会部署失败
以上仓库如果不够用,可以自己新建仓库,同样可以新建用户、角色和权限。管理员给用户配置角色,角色可以添加权限,权限就跟仓库挂钩。这样就可以指定用户可以部署到哪些仓库,这个一般中小公司用不到,有兴趣自己可以尝试一波。
Maven向私服下载构件
其实也就是将私服仓库配置到本地的repository,当项目在本地仓库找不到构件就会从私服搜索下载,然后放到本地仓库缓存起来,以便项目打包时使用。在settings.xml文件找到profile部分配置
配置私服仓库地址
<profile>
<id>nexus-public</id>
<repositories>
<!--仓库1-->
<repository>
<id>Nexus</id>
<!--你的私服仓库组地址-->
<url>http://11.11.11.11:8081/nexus/content/groups/public</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
<!--仓库2<repository>
<id>Aliyun</id>
<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
<releases>
<enabled>true</enabled>
</releases>
</repository>-->
</repositories>
</profile>
我这里是配置了仓库组。
激活profile ,才能使配置生效
<activeProfiles>
<activeProfile>nexus-public</activeProfile>
</activeProfiles>
在maven的settings.xml文件,对应位置添加即可
使用maven打包发布到私服
事实上,只要你的私服搭建完毕,maven也配置好了,只需要做下面两件事就可以发布jar到私服上。
在maven配置文件settings.xml的servers配置私服的认证。
用户名和密码就是nexus 里面配置账号密码,id 自定义,在pom 里面会引用此处的id 进而通过此处用户名和密码连接远程仓库。admin密码默认admin123(建议先修改密码),一般都是上传包需要校验,下载不用。
<servers>
<server>
<!--正式仓库验证-->
<id>maven-releases</id>
<username>admin</username>
<password>admin123</password>
</server>
<server>
<!--快照仓库验证-->
<id>maven-snapshots</id>
<username>admin</username>
<password>admin123</password>
</server>
</servers>
这里是配置了快照版本和发布版本两个校验,实际开发中这两个的账号密码应该不同。
在maven项目的POM配置发布地址
<!-- maven私服配置 -->
<distributionManagement>
<!-- 上面版本中以 -SNAPSHOT 为后缀则打包发布时会部署到快照仓库,否则是发布仓库-->
<repository>
<!-- nexus服务器中用户名:在settings.xml中<server>的id-->
<id>maven-releases</id>
<!-- 这个名称本身定义 -->
<name>maven-public1</name>
<url>http://11.11.11.11:8081/nexus/content/repositories/releases/</url>
</repository>
<!--快照 -->
<snapshotRepository>
<id>maven-snapshots</id>
<name>maven-snapshots</name>
<url>http://11.11.11.11:8081/nexus/content/repositories/snapshots/</url>
</snapshotRepository>
</distributionManagement>
注意这里的ip和端口改为你私服的ip端口,id要和settings.xml文件里面server的id相同才能匹配和校验成功。
通过上面的配置,就可以发布构件到你的私服了。执行maven命令 mvn clean deploy 即可。如果你项目版本是快照版本(如下图version后缀带 -SNAPSHOT),就会发布到快照仓库下。否则一律视为正式版本。
快照仓库
maven 打包代码到私服根据version 后面是否带有“-SNAPSHOTS” 来区分是打包线上版本还是快照版本,如果带有“-SNAPSHOTS” 打包快照版本,否则即为线上版本。发布地址分别对应快照仓库snapshots和正式仓库releases。