搭建Maven私有库nexus3版本并以SpringBoot项目为例发布及引用

3,221 阅读6分钟

一、概述

Maven私有库,顾名思义是给私人提供依赖仓库。在很多时候,Maven私有库对我们的作用很大。比如在局域网开发时访问不了远程仓库,私人开发的工具包自我版本管理,一些第三方禁止访问的工具包(如Oracle等),购买了一些第三方商用工具包等等。当然,Maven私有库还能在自动化部署起到加速作用,想想看,你在服务器上构建jar包或者war包时要走外网,而Maven私有库是内网的,这速度体验能一样么?

二、安装nexus3

前提条件:先安装JDK和Maven。建议JDK安装1.8以上版本,Maven安装3.5.2以上版本。

请注意环境变量的配置,如不会配置这请网上自寻教程,在这里不展开说明。

环境安装好的例子:可以清楚地看到Maven版本号和JDK版本号

步骤一:下载nexus3的官网安装包

wget http://download.sonatype.com/nexus/3/nexus-3.3.1-01-unix.tar.gz

步骤二:解压安装包并启动

1.解压,会得到两个目录文件:nexus-3.3.0-01(软件目录)和sonatype-work(文件目录)

tar -zxvf nexus-3.3.1-01-unix.tar.gz

2.启动,进入nexus-3.3.0-01/bin目录

./nexus start

因为nexus不推荐root用户启动,会出现如下的警告,可以不用管,并不影响使用。

然后,访问:http://ip:8081 出现如下页面就说明你安装成功了:

账号:admin 密码:admin123 (默认的账号密码)

1.默认端口修改。 nexus默认的端口是8081,如果想改端口,可以进入/nexus-3.3.1-01/etc/目录。 对nexus-default.properties配置中application-port=8081进行修改。 2.重置密码(没什么特殊情况就不建议改了)。 请参考文章:https://www.cnblogs.com/ybyqjzl/p/10349337.html

三、配置本地Maven的setting.xml配置

详细配置见官方文档,建议有英文能力的小伙伴看看,不要看百度上的一些nexus2的配置文章了,好多坑。

配置1:配置仓库源,在setting.xml加入mirror(把下面的配置放在mirrors模块中,替换一下自己刚才nexus3安装服务器的ip和端口)。

<mirror>
  <!--This sends everything else to /public -->
  <id>nexus</id>
  <mirrorOf>*</mirrorOf>
  <url>http://localhost:8081/repository/maven-public/</url>
</mirror>

配置2:配置profile,在setting.xml加入profile(把下面的配置放在profiles模块中)

<profile>
  <id>nexus</id>
  <!--Enable snapshots for the built in central repo to direct -->
  <!--all requests to nexus via the mirror -->
  <repositories>
    <repository>
      <id>central</id>
      <url>http://central</url>
      <releases><enabled>true</enabled><updatePolicy>always</updatePolicy></releases>
      <snapshots><enabled>true</enabled><updatePolicy>always</updatePolicy></snapshots>
    </repository>
  </repositories>
 <pluginRepositories>
    <pluginRepository>
      <id>central</id>
      <url>http://central</url>
      <releases><enabled>true</enabled><updatePolicy>always</updatePolicy></releases>
      <snapshots><enabled>true</enabled><updatePolicy>always</updatePolicy></snapshots>
    </pluginRepository>
  </pluginRepositories>
</profile>

相对官方文档,多了updatePolicy的always配置,这个配置的作用是打包时依赖版本更新。不然偶尔会报cached in the local repository的错误。

配置三:激活仓库源,在setting.xml加入activeProfile(把下面的配置放在activeProfiles模块中)

<!--make the profile active all the time -->
<activeProfile>nexus</activeProfile>

配置四:配置server账号密码,在setting.xml加入server(把下面的配置放在servers模块中)

<server>
  <id>nexus</id>
  <username>admin</username>
  <password>admin123</password>
</server>

注意:server中设置的id名(nexus)贯穿上下文配置乃至springboot中pom.xml中的配置,保持id的一致就对了。

至此,前期准备工作已经搞定!

四、Repositories仓库简单介绍(仅针对Maven)

一般用到的创库种类是hosted、proxy。Hosted代表宿主创库,用来发布一些第三方不允许的组件,比如Oracle驱动、比如商业软件jar包。Proxy代表远程的创库,最典型的就是Maven官方中央创库、JBoss创库等等。如果构建的Maven项目本地创库没有依赖包,那么就会去代理站点下载,那么代理站点也没有依赖包,就回去远程中央创库下载依赖,这些中央创库就是Proxy。代理站点下载成功后再下载至本机。

一般情况Maven自带的默认创库基本已经够用。特殊情况配置新的创库,指定url即可。

类型 描述
hosted 类型的仓库,内部项目的发布仓库
proxy 类型的仓库,从远程中央仓库中寻找数据的仓库
group 类型的仓库,组仓库用来方便我们开发人员进行设置的仓库
  • maven-central:中央仓库,类型为proxy。也就是说一般引入的maven依赖包会先下载到这个库中,然后在由本地从这个库再下载。
  • maven-releases:正式发布仓库,类型为hosts。这是私人正式发布的库。
  • maven-snapshots:预发布仓库,类型为hosts。这是私人预发布的库。
  • maven-public:共享组,类型为group。也就是说这里可以看到所有依赖包。

五、实践

创建一个springboot工程,然后针对pom.xml配置 配置1:配置nexus仓库(这段代码放在project模块中,把ip和端口改为安装nexus3的服务ip与端口)。

<distributionManagement>
	<repository>
		<id>nexus</id>
		<name>Releases</name>
		<url>http://127.0.0.1:8081/repository/maven-releases</url>
	</repository>
	<snapshotRepository>
		<id>nexus</id>
		<name>Snapshot</name>
		<url>http://127.0.0.1:8081/repository/maven-snapshots</url>
	</snapshotRepository>
</distributionManagement>

注意:这是nexus3,它的仓库链接跟nexus2不一样,别傻乎乎地copy别人项目的配置代码。至于怎么指定对应仓库的url,看下图。

配置2:配置spring-boot-maven-plugin插件,创建的springboot项目都会生成spring-boot-maven-plugin的打包插件。该插件打包成可执行的jar包。但实际上,我们希望打包成仅提供使用不可执行的jar包。因此,我们使用maven原有插件maven-compiler-plugin,配置如下(去掉原来的spring-boot-maven-plugin,把下面代码加到plugins的模块中):

<plugin>
	<groupId>org.apache.maven.plugins</groupId>
	<artifactId>maven-compiler-plugin</artifactId>
	<configuration>
		<source>1.8</source>
		<target>1.8</target>
	</configuration>
</plugin>

六、测试

发布:执行命令 mvn clean deploy 或者 编译器操作如下

检查maven-public库,能看到你的工程包说明打包发布成功!

引用:配置跟发布的一样,相对来说少了实战中的配置2。引入例子:

<dependency>
    <groupId>com.gst.common</groupId>
    <artifactId>maas-common</artifactId>
    <version>0.0.1-SNAPSHOT</version>
</dependency>

说明: pom.xml中设置的版本号带SNAPSHOT如(0.0.1-SNAPSHOT)会发布在maven-snapshot仓库中,正常版本号则发布在maven-releases中,那为何会在maven-public看到?以为maven-pulic包含了maven-cental、maven-releases、maven-snapshots三个库。