Maven私服从搭建到使用
前言
私服是架设在局域网的一种特殊的远程仓库,目的是代理远程仓库及部署第三方构件。有了私服之后,当 Maven 需要下载构件时,直接请求私服,私服上存在则下载到本地仓库;否则,私服请求外部的远程仓库,将构件下载到私服,再提供给本地仓库下载。
使用Maven的好处有下
1、jar包下载速度比中央仓库快
2、有些jar包由于版权原因,maven中央仓库没有,比如oracle JDBC驱动。另外也会有一些项目中用到的比较老的开源jar包,中央仓库也没用
3、公司自己开发的jar包并不开源,不能上传到maven中央仓库,只能部署到私服上面
4、便于进行统一jar包管理
5、可在此基础上搭建自动化部署服务器:
1)Maven构建和释放项目;
2)SubVersion源代码库,管理源代码;
3)远程存储库管理器(Jfrog/ Nexus)来管理项目的二进制文件。
使用Nexus搭建maven私服
1.Nexus下载
使用Nexus Repository Manager OSS 3.x
地址:https://www.sonatype.com/download-oss-sonatype
Nexus Repository Manager 2.x
地址:https://help.sonatype.com/repomanager2/download
Pro版本 需要收费才能使用
2.安装
解压
tar -zxvf nexus-3.13.0-01-unix.tar.gz
进入目录/bin,输入./nexus,会显示命令
./nexus
Usage: ./nexus { console | start | stop | restart | status | dump }
默认是8081端口,配置文件:etc/nexus-default.properties
修改配置:
## DO NOT EDIT - CUSTOMIZATIONS BELONG IN $data-dir/etc/nexus.properties
##
# Jetty section
application-port=8081
application-host=0.0.0.0
nexus-args=${jetty.etc}/jetty.xml,${jetty.etc}/jetty-http.xml,${jetty.etc}/jetty-requestlog.xml
nexus-context-path=/
# Nexus section
nexus-edition=nexus-pro-edition
nexus-features=\
nexus-pro-feature
启动nexus
./bin/nexus start
查看运行状态
./bin/nexus status
介绍Nexus可试图界面
配置后访问:http://服务器地址:8081
默认账号密码:admin / admin123
查看所有仓库
Repository 介绍
name:
Central:该仓库代理Maven的中央仓库,策略为Release,只会下载和缓存中央仓库中的发布版本构件。
Public:仓库组,将所有策略为Release的仓库聚合并通过一致的地址提供服务。
Release:策略为Release的宿主类型仓库,用来部署组织内部的发布版本构件。
Snapshots:策略为Snapshots的宿主类型仓库,用来部署组织内部的快照版本构件,也就是未发布版本。
neget 是 .net 使用的仓库,这里可以忽略
type:
group(仓库组类型):又叫组仓库,用于方便开发人员自己设定的仓库(能够组合多个仓库为一个地址提供服务)
hosted(宿主类型):内部项目的发布仓库(内部开发人员,发布上去存放的仓库)
proxy(代理类型):从远程中央仓库中寻找数据的仓库(可以点击对应的仓库的Configuration页签下Remote
Storage Location属性的值即被代理的远程仓库的路径)
format
maven2是JAVA仓库
nuget是.net仓库,在此忽略
status
确认是 online / oneline Ready To connect 即可
创建私有仓库并在项目中使用
创建私有Maven仓库
大家根据需求选择对应类型很好区分,这里我们项目组要搭建自己的私有仓库所以选择hosted
加入到我们私服的公共库里,这样你需要的包可以在公共库找到,找不到会在你指定包里找。
Maven私服的使用
1.setting.xml文件配置
在 ${maven}/conf/setting.xml,配置如下内容:
认证信息:
<!--设置私库认证信息-->
<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>
添加镜像:
<mirrors>
<mirror>
<id>maven-releases</id>
<name>maven-releases</name>
<url>http://192.168.120.60:8081/repository/maven-releases/</url>
<mirrorOf>maven-releases</mirrorOf>
</mirror>
<mirror>
<id>maven-snapshots</id>
<name>maven-snapshots</name>
<url>http://192.168.120.60:8081/repository/maven-snapshots/</url>
<mirrorOf>maven-snapshots</mirrorOf>
</mirror>
</mirrors>
2.maven pom配置
注意 ID 与 setting.xml 中 server id 一致
<!-- 指定MAVEN私服(远程仓库) -->
<repositories>
<repository>
<id>maven-public</id>
<name>maven-public</name>
<url>http://192.168.120.60:8081/repository/maven-public/</url>
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
</repositories>
<!-- 你上传的项目项目工具包 -->
<dependency>
<groupId>com.dy</groupId>
<artifactId>smart_city_tools</artifactId>
<version>1.0.4-SNAPSHOT</version>
</dependency>
这样你项目需要引用的第三方包就能引过来了
第三方包上传到私服
在pom.xml文件添加:
<!-- 要部署本项目到MAVEN私服(远程仓库)所要指定的私服地址 -->
<!-- 注意:需要本地仓库配置远程仓库的仓库ID以及用户名和密码 -->
<distributionManagement>
<repository>
<id>maven-releases</id>
<name>Packaging Release Repository</name>
<url>http://192.168.120.60:8081/repository/maven-releases/</url>
</repository>
<snapshotRepository>
<id>maven-snapshots</id>
<name>Packaging Snapshot Repository</name>
<url>http://192.168.120.60:8081/repository/maven-snapshots/</url>
</snapshotRepository>
</distributionManagement>
至于是发布到仓库是maven-releases还是maven-snapshots仓库里你需要在pom.xml中指定如图:
对应到我们私有仓库如图所示:
首先安装到本地仓库
再发布到远程仓库
至于deploy和deploy-file的区别可以参照:
使用Nexus和mvn deploy:deploy-file上传文件到中央库(Maven仓库).
这样我们就可以完美的把当前项目作为包上传到第三方仓库,方便其他项目的引用了。