前言
在大型互联网公司,都会在公司内部部署自己公司独立的Maven私服(只能公司内部访问),Maven私服作用可以管理微服务接口发布、第三方Jar包管理等;最近有空去网上找了些资料自己研究了下,并记录下来。
Maven私服应用场景
1. 微服务接口发布:
微服务开发中,实现对微服务接口发布。比如Dubbo项目中,订单系统需要调用支付系统的接口,这时你需要支付接口的源码。正常开发中不会直接引入其接口项目,而是仅引入接口jar包进行调用,这时就可以把支付系统的接口jar包打包到Maven私服中,订单系统只需要引入支付接口jar包的依赖,即可将其从Maven私服中引入项目中,便可对订单系统进行调用。
总结:简单的说就是服务提供者将服务接口打包上传到Maven私服,消费者通过Maven依赖下载对应接口jar包。
2. 第三方Jar包管理(缓存企业级jar):
Maven仓库中没有的jar包或公司内部使用的jar包,我们可以手动将jar包打入本地仓库或Maven私服中。
结构图:
一、基于Docker搭建Maven私服
1. 下载一个nexus3的镜像
docker pull sonatype/nexus3
2. 将容器内部/var/nexus-data挂载到主机/root/nexus-data目录。
docker run -d -p 8082:8081 --name nexus -v /root/nexus-data:/var/nexus-data --restart=always sonatype/nexus3
Maven私服启动容器稍微比较慢,等待1分钟即可。
默认登陆账号 admin 密码 admin123
二、创建Maven私服仓库
1. 访问管理页面 本机ip:8082 (本机ip为运行nexus的容器的主机ip),并登录
2. 创建私服仓库
一、点击设置按钮 – Repository – Create Repository
二、创建仓库,点击Create repository,然后选择maven2(hosted)然后输入仓库名称(test-release)。在version policy中选择这个仓库的类型,这里选择release,在Deployment policy中选择Allow redeploy(这个很重要).
3. 创建私服账号
点击左侧菜单栏的Users菜单,然后点击Create local user
三、将jar包上传到Maven私服
1. 配置Maven settings.xml
命令行执行 mvn -version
查看maven所在路径,找到Maven的settings.xml文件,在<servers>中添加如下配置;注意查看是否保存成功,笔者由于没有没有保存成功,导致打包上传jar包失败。
<servers>
<!-- Maven私服配置 -->
<server>
<id>wangxu</id> <!-- id 也是用户名 -->
<username>wangxu</username> <!-- 用户名-->
<password>123</password> <!-- 密码-->
</server>
</servers>
2. 配置要上传项目的 pom.xml
注意:项目的限定版本一定为RELEASE,因为上传的对应仓库的存储类型为RELEASE ,如图:
打开要上传项目的pom.xml文件,添加如下配置:
-
根标签<project>下添加仓库地址配置(也可以直接配置在settings.xml中,就不用每个项目都配置了)
<project> <--根标签--> <!--指定仓库地址 --> <distributionManagement> <repository> <!--此名称要和.m2/settings.xml中设置的ID一致 --> <id>wangxu</id> <url>http://192.168.199.188:8082/repository/test_release/</url> </repository> </distributionManagement> </project>
-
<build>标签的<plugins>下添加发布代码的插件依赖
<!--发布代码Jar插件 --> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-deploy-plugin</artifactId> <version>2.7</version> </plugin> <!--发布源码插件 --> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-source-plugin</artifactId> <version>2.2.1</version> <executions> <execution> <phase>package</phase> <goals> <goal>jar</goal> </goals> </execution> </executions> </plugin>
3. 使用mvn deploy
命令打包上传到Maven私服仓库
进入项目跟目录,打开dos窗口执行mvn deply 命令打包上传
进入nexus查看,此时已经有了上传的jar包
四、测试依赖信息,从Maven私服中获取jar包pom.xml添加:
新建Maven项目,在pom.xml添加依赖:
<dependencies>
<!--上传jar包的依赖信息-->
<dependency>
<groupId>com.example</groupId>
<artifactId>jekins</artifactId>
<version>0.0.1-RELEASE</version>
</dependency>
</dependencies>
配置Maven私服仓库地址:
<repositories>
<repository>
<!--此名称要和.m2/settings.xml中设置的ID一致 -->
<id>wangxu</id>
<url>http://192.168.199.188:8082/repository/test_release/</url>
</repository>
</repositories>
五、如何判断文件是否发生改变 (防篡改)
如何知道一个文件是否改变了呢?
当然是用比较文件hash值的方法,文件hash又叫文件签名,文件中哪怕一个bit位被改变了,文件hash就会不同。
比较常用的文件hash算法有MD5和SHA-1。
私服上的文件签名:
下载jar包到本地仓库,也有这个文件:
打开比较,我们发现是一致的:
-------------------------------------------------- 学习不易,需要坚持 ----------------------------------------------------------