安装nexus oss
下载 Nexus oss 3,安装,进入bin目录,执行
./nexus start
访问 http://192.168.1.XX:8081/, XX替换成你的IP,默认的登陆账号是admin/admin123,进入之后可以创建新的账号。
发布包到nexus
建立私服的主要目的是可以发布公司内部的包,方便项目依赖。
在项目的pom.xml文件添加:
<distributionManagement>
<repository>
<id>nexus</id>
<name>Releases</name>
<url>http://192.168.1.17:8081/repository/maven-releases</url>
</repository>
<snapshotRepository>
<id>nexus</id>
<name>Snapshot</name>
<url>http://192.168.1.17:8081/repository/maven-snapshots</url>
</snapshotRepository>
</distributionManagement>
以上配置中的URL对应nexus中的两个默认Repository:
此处可以配置其他的maven仓库,比如spring的maven仓库,下面会讲到如何配置。
然后运行mvn deploy
,就可以将包发布的nexus中,可以在如下画面中查询。
401 unauthorized
如果发布时返回401失败,需要在Maven的配置文件中(setting.xml)设置nexus的用户名和密码。
Return code is: 401, ReasonPhrase: Unauthorized.
<servers>
<server>
<id>nexus</id>
<username>admin</username>
<password>admin123</password>
</server>
</servers>
400
如果返回400错误,需要设置目的repository,发布策略改为Allow redeploy.
使用nexus私服
在Maven的setting.xml文件中添加如下配置,这样所有对maven默认仓库(ID为central)的访问都会通过http://192.168.1.17:8081/repository/maven-public/,而这个仓库nexus已经为我们指定了maven官方仓库的地址,所以profile中的URL是个假地址。
<mirrors>
<!--对Maven的默认仓库central镜像-->
<mirror>
<id>nexus</id>
<mirrorOf>central</mirrorOf>
<url>http://192.168.1.17:8081/repository/maven-public/</url>
</mirror>
<profiles>
<profile>
<id>nexus</id>
<repositories>
<repository>
<id>central</id>
<url>http://central</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
</repositories>
<pluginRepositories>
<pluginRepository>
<id>central</id>
<url>http://central</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
</snapshots>
</pluginRepository>
</pluginRepositories>
</profile>
</profiles>
<activeProfiles>
<activeProfile>nexus</activeProfile>
</activeProfiles>
配置Spring Milestones
在创建Spring Cloud项目后,pom.xml文件中会使用spring-milestones这个仓库,能否不在pom.xml中出现这个配置呢?
<repositories>
<repository>
<id>spring-milestones</id>
<name>Spring Milestones</name>
<url>https://repo.spring.io/milestone</url>
<snapshots>
<enabled>false</enabled>
</snapshots>
</repository>
</repositories>
道理和上一节中配置maven默认仓库是一样的,这里我们需要配置spring-milestones这个仓库ID。
mirrors中添加:
<!--对Spring的maven仓库spring-milestones镜像-->
<mirror>
<id>spring</id>
<mirrorOf>spring-milestones</mirrorOf>
<url>http://192.168.1.17:8081/repository/spring-milestones/</url>
</mirror>
profiles中添加如下,注意URL仍然是个假地址。
<profile>
<id>spring</id>
<repositories>
<repository>
<id>spring-milestones</id>
<url>https://spring</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>false</enabled>
</snapshots>
</repository>
</repositories>
<pluginRepositories>
<pluginRepository>
<id>spring-milestones</id>
<url>https://spring</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>false</enabled>
</snapshots>
</pluginRepository>
</pluginRepositories>
</profile>
在nexus中创建新的仓库,地址即为上图mirror中的URL http://192.168.1.17:8081/repository/spring-milestones/。
首先创建maven proxy类型的仓库,并指定被代理的maven仓库地址,这里指定spring的maven仓库地址。
再创建maven group类型的仓库,并在成员仓库中指定刚才创建的proxy仓库。
图中group仓库的URL就是刚才mirror中指定的URL。
完整的Setting.xml
<?xml version="1.0" encoding="UTF-8"?>
<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd">
<pluginGroups>
</pluginGroups>
<proxies>
</proxies>
<servers>
<server>
<id>nexus</id>
<username>indeed</username>
<password>indeed</password>
</server>
</servers>
<mirrors>
<!--对Maven的默认仓库central镜像-->
<mirror>
<id>nexus</id>
<mirrorOf>central</mirrorOf>
<url>http://192.168.1.17:8081/repository/maven-public/</url>
</mirror>
<!--对Spring的maven仓库spring-milestones镜像-->
<mirror>
<id>spring</id>
<mirrorOf>spring-milestones</mirrorOf>
<url>http://192.168.1.17:8081/repository/spring-milestones/</url>
</mirror>
</mirrors>
<profiles>
<profile>
<id>nexus</id>
<repositories>
<repository>
<id>central</id>
<url>http://central</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
</repositories>
<pluginRepositories>
<pluginRepository>
<id>central</id>
<url>http://central</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
</snapshots>
</pluginRepository>
</pluginRepositories>
</profile>
<profile>
<id>spring</id>
<repositories>
<repository>
<id>spring-milestones</id>
<url>https://spring</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>false</enabled>
</snapshots>
</repository>
</repositories>
<pluginRepositories>
<pluginRepository>
<id>spring-milestones</id>
<url>https://spring</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>false</enabled>
</snapshots>
</pluginRepository>
</pluginRepositories>
</profile>
</profiles>
<activeProfiles>
<activeProfile>spring</activeProfile>
<activeProfile>nexus</activeProfile>
</activeProfiles>
</settings>
http://www.baeldung.com/maven-deploy-nexus
https://help.sonatype.com/repomanager3/maven-repositories#MavenRepositories-ConfiguringApacheMaven