当开发部有多个项目时,你会发现肯定有个util文件夹,下面堆满了一大堆的StringUtil,DateUtil,里面又是各种地方copy过来的代码,谁用谁加,然后又不敢轻易的去掉,不小心碰到bug了,除非你敢肯定你的改法是对方想要的,不然你还压根不敢动,还不如再加个方法,随着项目后期,这种代码会越来越多;项目中有微服务如dubbo涉及到大量jar包时,如果你搭建2个dubbo还好说,如果你搭建10个dubbo,某一天你发现需要升级下dubbo版本,难道你要依次修改10个dubbo中的pom文件么。
以上2种情况都可以maven私服来解决,解决方法如下:
1:抽取出公共方法,写到一公共代码工程中,打成jar包,通过pom依赖统一管理。
2:多个项目有大量公共jar时,可以通过抽取成pom的parent来统一管理。
那么开始搭建maven私服,首先下载nexus文件,下载地址
https://help.sonatype.com/repomanager2/download/download-archives---repository-manager-2
我下载的是nexus-2.14.8-01-bundle.tar
下载完成后上传到linux服务器上
一般上传到/usr/local目录下,上传完成后输入命令解压
tar -zxvf nexus-2.14.8-01-bundle.tar
解压完成后会生成对应的2个目录
/usr/local/nexus-2.14.8-01/conf目录下nexus.properties文件是修改端口用,nexus默认端口为8081
输入命令进入到nexus的bin目录下,如下图
输入 ./nexus start 启动,如果有提示报错
那么输入 export RUN_AS_USER=root
再次输入 ./nexus start
启动后,启动成功。以上启动默认linux上已经安装jdk,没有jdk可是无法启动的,如何安装jdk请搜索之。
启动成功后,在浏览器输入 http://10.60.53.251:8081/nexus/ 就可以访问私服了。
右上角点击 Log In,用户名 admin 默认密码 root123,登录后点击左边中间的Repositories,查看私服信息。
下一步问题就是修改本地settings.xml信息,配置私服信息,可以从私服上down jar包了。
找到settings.xml文件,一般位于C盘用户对应的.m2文件夹下,编辑settings.xml文件
用户名和密码没什么好说的,这个id要记住,有几个位置id必须是一致的才行,接下来是profile中的配置,配置如下
这3个位置的id必须保持一致,不然无法down私服上的jar包,id=developer这里是用来区分profile的,通过idea导入maven工程时有一部是要你选择profile的,如图
配置了2个profile,导入项目时会需要你选择导入对应的profile配置,如图
到这里settings.xml就配置完毕,保存退出,现在轮到配置项目工程中pom.xml了。
1:打包成jar提供给其他组件引用
先搭建了一个工具工程px-commons-codec,代码结构如下图
集成了DateUtil,StringUtils,及一些项目需要用到的包装类Result,打开pom.xml
配置修改如下
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.ky.px</groupId>
<artifactId>px-commons-codec</artifactId>
<packaging>jar</packaging>
<version>1.0.0-SNAPSHOT</version>
<dependencies>
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>RELEASE</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.3.2</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
</plugins>
</build>
<distributionManagement>
<repository>
<id>nexus</id>
<url>http://10.60.53.251:8081/nexus/content/repositories/release/</url>
</repository>
<snapshotRepository>
<id>nexus</id>
<url>http://10.60.53.251:8081/nexus/content/repositories/snapshots/</url>
</snapshotRepository>
</distributionManagement>
</project>
简单解释下,打成jar包,版本是1.0.0快照,最下面的distributionManagement是配置的 发布路径。groupId和artifactId的话丢个图自行领悟,图如下
然后在idea中,点击右边的maven,找到px-commons-codec准备发布。
依次点击clean,compile,deploy,出现如下提示就表示你已经发布成功。
然后我们回到nexus上,就可以找到我们发布到私服上的jar包了,如图
将xml提供添加到对应项目的pom.xml中,就可以从私服上down下之前发布的jar包并进行引用了。
2:打包成pom提供公共引用
创建一个工程,结构如图
打开pom.xml文件并进行依赖的配置,配置如图
这里配置问题不大,主要是packaging必须配置为pom,配置完成后一样需要打开右边maven,点击deploy发布。
发布完成后,到对应的dubbo微服务中去修改pom.xml配置,我随意改了一个,如图
重点是标记中的配置,继承parent中配置,这样这个report微服务中的依赖就非常干净了,仅仅只有2个,其中1个是对外暴露的接口,1个是之前打包的公共方法。未来要升级dubbo的版本也就非常简单了。