nexus官网
https://www.sonatype.com/nexus/repository-pro
下载免费版本:
安装Nexus
1.下载
nexus-3.29.2-02-unix.tar.gz
2.解压
tar -xzf nexus-3.29.2-02-unix.tar.gz
3.修改配置文件(不修改默认配置可跳过这个步骤)
cd nexus-3.29.2-02
vi etc/nexus-default.properties
# 先备份一下配置文件
cp nexus-default.properties nexus-default.properties_bak0208
默认端口8081, 可以在文件里面配置
4.启动(不建议root用户启动,当然你要root启动也可以)
./bin/nexus start
配置文件
启动
访问 http://192.168.40.129:8081/
访问不通时关闭防火墙
查看防火墙状态
systemctl status firewalld.service
关闭防火墙
systemctl stop firewalld.service
禁用防火墙
systemctl disable firewalld.service
登陆:初始账号 admin ,密码在 /home/soft/sonatype-work/nexus3/admin.password 文件里,进去之后按提示修改
主界面:
- maven-central:maven中央库,默认从https://repo1.maven.org/maven2/拉取jar(Proxy)
- maven-releases:私库发行版jar(Hosted)
- maven-snapshots:私库快照jar(Hosted)
- maven-public:仓库分组,把上面三个仓库组合在一起对外提供服务,在本地maven基础配置(Group)
上传自己的jar包到Nexus
1.配置maven目录->setting.xml
<server>
<!-- 随便设置一个id,对应pom.xml里面distributionManagement-repository的id -->
<id>mydeploymentRepo</id>
<!-- nexus 账号 -->
<username>admin</username>
<!-- nexus 密码 -->
<password>123456</password>
</server>
2.配置pom.xml
<!-- 使用distributionManagement将项目打包上传到nexus私服 -->
<distributionManagement>
<!--正式仓-->
<repository>
<!-- nexus服务器中用户名:在settings.xml中<server>的id-->
<id>mydeploymentRepo</id>
<!-- 这个名称自己定义 -->
<name>Release repository</name>
<!-- 正式仓地址 -->
<url>http://192.168.40.129:8081/repository/maven-releases/</url>
</repository>
<!--快照仓-->
<snapshotRepository>
<!-- nexus服务器中用户名:在settings.xml中<server>的id-->
<id>mydeploymentRepo</id>
<!-- 这个名称自己定义 -->
<name>Snapshots repository</name>
<!-- 快照仓地址 -->
<url>http://192.168.40.129:8081/repository/maven-snapshots/</url>
</snapshotRepository>
</distributionManagement>
.....
<build>
<plugins>
<!--打一个源码包, deploy之后源码包也传到nexus-->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-source-plugin</artifactId>
<executions>
<execution>
<id>attach-sources</id>
<goals>
<goal>jar</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
3.打包上传
mvn deploy -Dmaven.test.skip=true
源码包效果
本地:
nexus
maven从nexus下载依赖
配置pom.xml
<repositories>
<repository>
<id>mydeploymentRepo</id>
<name>nexus maven</name>
<url>http://192.168.40.129:8081/repository/maven-public/</url>
</repository>
</repositories>
效果
release正式版本和snapshot快照版本区别
正式版和快照版打包发布:
maven会根据模块的版本号(pom文件中的version)中是否带有-SNAPSHOT来判断是快照版本还是正式版本;
pom.xml version中有SNAPSHOT,则发布到快照库;无SNAPSHOT则发布到正式库;
配置片段:
<groupId>com.qmy</groupId>
<artifactId>act-sdk</artifactId>
<!--正式版本-->
<version>1.0.1</version>
<!--快照版本-->
<!-- <version>1.0.1-SNAPSHOT</version>-->
aven-releases和maven-snapshots为Nexus默认自带的私有仓
正式版本仓:
快照版本仓:
正式版本和快照版本的主要区别在于,本地获取这些依赖的机制有所不同。
- 正式版本:构建的时候,先在本地仓库中查找是否已经有了这个依赖库,如果没有的话才会去远程仓库去拉取。如果发布一个xxx-1.1.jar到远程仓库,有一个项目依赖这个库,第一次构建会把这个jar拿到本地仓库中,以后再构建就不会去访问远程仓库了。你修改了代码发布上去,也不会再拉,本地这个库不能得到更新。除非升级这个版本 xxx-1.2.jar,然后通知项目,修改依赖为这个版本。
- 快照版本:会优先去远程仓库中查看是否有最新的xxx-1.2.jar,如果有则下载下来使用。即使本地仓库中已经有了xxx-1.2.jar,它也会尝试去远程仓库中查看同名的jar是否是最新的。在配置Maven的Repository的时候中有个配置项,可以配置对于SNAPSHOT版本向远程仓库中查找的频率。频率共有四种,分别是always、daily、interval、never。当本地仓库中存在需要的依赖项目时,always是每次都去远程仓库查看是否有更新,daily是只在第一次的时候查看是否有更新,当天的其它时候则不会查看;interval允许设置一个分钟为单位的间隔时间,在这个间隔时间内只会去远程仓库中查找一次,never是不会去远程仓库中查找(这种就和正式版本的行为一样了)。
- 所以一般在开发模式下,我们可以频繁的发布SNAPSHOT版本,以便让其它项目能实时的使用到最新的功能做联调;当版本趋于稳定时,再发布一个正式版本,供正式使用。当然在做正式发布时,也要确保当前项目的依赖项中不包含对任何SNAPSHOT版本的依赖,保证正式版本的稳定性。
创建自定义私有仓
选策略 maven2(hosted)
配置maven-public,将ltx加到里面,它默认包含了maven-releases、maven-snapshots、maven-central
备注:上传的话,把distributionManagement-repository的url换成 http://192.168.40.129:8081/repository/ltx/ 就行。
Nexus中央仓远程url配置为阿里云
- Nexus默认远程仓库为https://repo1.maven.org/maven2/
- 阿里云代理仓库:http://maven.aliyun.com/nexus/content/groups/public/
私有库下载过的依赖,会在私有库缓存起来,开发连接私有库可不用远程下载,直接走的私有库下载,速度会快一些