从零搭建Maven本地私服和简单使用

来源:互联网 发布:清华大学网络学堂登录 编辑:程序博客网 时间:2024/06/06 08:24

前言:

不知道你对maven中央仓库导入依赖的方法怎么看,反正我是挺不喜欢这种方法的,弄个maven项目简直不要太浪费时间,而且最后你还会发现好多jar包都没有导入.

所以,特地来写篇maven本地仓库的搭建.

通过建立自己的私服,就可以降低中央仓库负荷,节省外网宽带,加速maven构建,自己部署构建等,从而高效的使用Maven

有三种专门的Maven仓库管理软件可以来帮助大家建立私服:Apache的Archiva,JFrog的Artifactory和Sonatype的Nexus.

在此我们介绍Nexus,目前最流行的Maven仓库管理软件


1.Nexus简介

Nexus有开源版和专业版.一下是开源版的一些特性:

  • 较小的内存占用(最少仅为28K)
  • 基于ExtJs
  • 基于Restlet的完全REST API
  • 支持代理仓库,宿主仓库和仓库组
  • 基于文件系统,不需要数据库
  • 支持仓库索引和搜索
  • 支持从界面上传Maven构件
  • 细粒度的安全控制

2.安装Nexus(JDK建议使用1.7)

Nexus是典型的JavaWeb应用,他有两种安装包,一种是包含Jetty容器的Bundle包,一种是不包含Web的war包

下载地址:nexus下载地址

Buddle自带了Jetty容器,因此用户不需要额外的Web容器就能直接启动Nexus.此处将该方式的安装.

war包的安装只需要放到tomcat等web容器下启动就好了.

Window的安装方式较为简单,此处讲解CentOS的安装.

命令:

#su root   //切换到管理员

下载

# wget https://sonatype-download.global.ssl.fastly.net/nexus/oss/nexus-2.11.2-03-bundle.tar.gz

不过还是建议在windows上面下载了然后拖到linux下解压安装


进入配置文件


修改配置文件

 # vi nexus.properties


    保存命令
    按ESC键 跳到命令模式,然后:
    :w   保存文件但不退出vi
    :w file 将修改另外保存到file中,不退出vi
    :w!   强制保存,不推出vi
    :wq  保存文件并退出vi
    :wq! 强制保存文件,并退出vi
    q:  不保存文件,退出vi
    :q! 不保存文件,强制退出vi
    :e! 放弃所有修改,从上次保存文件开始再编辑
      之后,回车,ok!

进入以下路径修改成以root启动


修改成以root启动


保存 上面已经说过

启动

./nexus start 

启动以后去看启动日志:

日志路径.



出现如上问题,将jdk换成1.7,再次启动.

如果提示权限不够,使用命令chmod 775 nexus.


启动完成没报错就可以在浏览器中输入了:ip:8081/nexus


将nexus设置为开机自启动

#vi  /etc/rc.d/rc.local  编辑该文档,在该文档最后一行加上你nexus所在目录路径,然后./nexus start


至此maven本地私服搭建完成.


3.创建Nexus代理仓库

安装完成以后,接下来创建一个阿里的代理仓库.保证你速度快的飞起



其他配置不做描述,有兴趣自己百度.

然后将阿里的代理仓库放入自己的仓库组中.



4.maven项目索引
下载Maven项目索引,项目索引是为了使用者能够在私服站点查找依赖使用的功能


保存后后台会运行一个任务,点击菜单栏的Scheduled Tasks选项即可看到有个任务在RUNNING。 同样,要使用阿里的仓库,也需要右键,repair index,载完成后,Maven索引就可以使用了,在搜索栏输入要搜索的项,就可以查到相关的信息。例如spring-core


5.配置Maven从Nexu下载构件

<!-- 配置相关私服信息指定仓库 --><repositories><repository><id>nexus</id><name>nexus</name><!-- 仓库组所在路径 --><url>http://192.168.0.107:8081/nexus/content/groups/public/</url><releases><enabled>true</enabled></releases><snapshots><enabled>true</enabled></snapshots></repository></repositories><!-- 指定插件仓库 --><pluginRepositories><pluginRepository><id>nexus</id><name>nexus</name><url>http://192.168.0.107:8081/nexus/content/groups/public/</url><releases><enabled>true</enabled></releases><snapshots><enabled>true</enabled></snapshots></pluginRepository></pluginRepositories>
但是这样的配置只对当前Maven项目有效,在实际应用中,我们往往想要通过一次配置就能让本机所有的Maven项目都能使用自己的Maven私服,这个时候,就要在settings.xml文件里面进行设置

<!--  配置nexus仓库 --><profile>      <id>nexus</id>      <repositories>        <repository>          <id>nexus</id>  <name>Nexus</name>          <url>http://192.168.0.107:8081/nexus/content/groups/public/</url>  <releases><enable>true</enable>  </releases>  <snapshots><enable>true</enable>   </snapshots>        </repository>      </repositories>  <pluginRepositories><pluginRepository><id>nexus</id>    <name>Nexus</name><url>http://192.168.0.107:8081/nexus/content/groups/public/</url>  <releases><enable>true</enable>  </releases>  <snapshots><enable>true</enable>  </snapshots></pluginRepository>  </pluginRepositories>    </profile><!-- 激活这几个配置  --><activeProfile><activeProfile>nexus</activeProfile></activeProfile>
以上配置已经能让本机所有的Maven项目从Nexus私服下载构建,但是Maven除了从nexus上下载构建以外还会不时的访问中央仓库central,但是我们希望的是所有的Maven下载请求都仅仅通过Nexus,以全面发挥私服的作用.这时候就需要用到Maven镜像配置,可以创建一个匹配任何仓库的镜像,镜像的地址为私服.这样Maven对任何仓库的构件下载请求都会转到私服中.

具体配置:

<mirrors><!-- 让所有请求都走私服  --><mirror>      <id>nexus</id>      <url>http://192.168.0.107:8081/nexus/content/groups/public/</url>      <mirrorOf>*</mirrorOf>            </mirror></mirrors><profiles><profile>      <id>nexus</id>      <repositories>        <repository>          <id>central</id>          <url>http://central</url>  <releases><enable>true</enable>  </releases>  <snapshots><enable>true</enable>   </snapshots>        </repository>      </repositories>  <pluginRepositories><pluginRepository><id>central</id><url>http://central</url>  <releases><enable>true</enable>  </releases>  <snapshots><enable>true</enable>  </snapshots></pluginRepository>  </pluginRepositories>    </profile><!-- 激活这几个配置  --><activeProfile><activeProfile>nexus</activeProfile></activeProfile></profiles>
可以看到他们的id都是central.也就是说,覆盖了超级POM中央仓库的配置,他们的url已无关紧要,因为所有请求都会通过镜像访问私服地址.

配置仓库及插件的主要目的是开启对快照版本下载的支持,当maven要下载发布版本或者快照版本的构建时,它首先检查central,看该类型的构件是否支持下载,得到正面回答以后,再根据镜像匹配规则转而访问私服仓库地址


6.部署构建至Nexus

日常开发生成的快照版本构件可以直接部署到Nexus中策略为Snapshot的宿主仓库中,项目正式发布的构件则应该部署到Nexus中策略为Realease的宿主仓库中.

在项目的pom.xml中的配置为

<distributionManagement><repository><id>nexus-releases</id><name>Nexus Releases Repository</name><!-- 指定正式版发布的依赖地址 --><url>http://192.168.0.107:8081/nexus/content/repositories/releases/</url></repository><!-- 快照版 --><snapshotRepository><id>nexus-snapshots</id><name>Nexus Snapshots Repository</name><url>http://192.168.0.107:8081/nexus/content/repositories/snapshots/</url></snapshotRepository></distributionManagement>
但是Nexus的仓库对于匿名用户是只读的,为了能够部署构建还需要在settings.xml中配置认证信息

  <servers><!-- 配置认证信息  -->     <server>        <id>nexus-releases</id>        <username>admin</username>        <password>admin123</password>      </server>      <server>        <id>nexus-snapshots</id>        <username>admin</username>        <password>admin123</password>      </server>     </servers>
配置完这些以后当你需要发布当前项目时候,只需要使用maven命令

clean deploy



发布成功,然后就可以去私服中看当前项目是否发布成功



时间什么的也是一目了然.

7.手动部署第三方构建至Nexus

某些Java Jar文件(如Oracle)的JDBC驱动,由于许可证的因素,它们无法公开的放在公共仓库,此外还有大量的小型开源项目,他们没有把自己的构件分发到中央仓库,也没有维护自己的仓库,因此无法从公共仓库获得,这时候用户就需要自己将这类构件手动下载到本地,然后通过nexus的界面上传到私服中.


上传完以后你就可以根据上传的坐标在maven中使用它了.


参考资料:

Maven实战

0 0
原创粉丝点击