搭建自己的 Maven 仓库
搭建自己的 Maven 仓库
搭建仓库
这里我们使用 Docker 容器技术。
- 拉取镜像:
docker pull sonatype/nexus3
- 运行镜像:
docker run -d -p 8081:8081 --name nexus sonatype/nexus3
- 可以通过浏览器查看仓库,地址为:ip:port,用户名为admin,密码保存在admin.password文件里面,可以通过
find / -name admin.password
命令找到文件路径,然后通过cat path/admin.password
来查看密码。
客户端配置
通过 maven 的 settings.xml 文件来配置,添加如下内容。
<mirrors>
<mirror>
<id>mirror_id</id>
<mirrorOf>*</mirrorOf>
<name>mirror_name</name>
<url>http://123.123.123.123:8081/repository/maven-public/</url>
</mirror>
如果要访问仓库中的私有内容,还需添加如下配置(密码或密钥,二选一)。
<servers>
<server>
<id>mirror_id</id>
<privateKey>/path/to/private/key</privateKey>
<passphrase>optional; leave empty if not used.</passphrase>
</server>
<server>
<id>mirror_id</id>
<username>repouser</username>
<password>repopwd</password>
</server>
</servers
如果需要使用仓库中的snapshot版本的jar包,则还需在 settings.xml 中插入如下内容:
<profiles>
<profile>
<id>profile_id</id>
<repositories>
<repository>
<id>mirror_id</id>
<url>http://123.123.123.123:8081/repository/maven-public/</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
</repositories>
</profile>
</profiles>
<activeProfiles>
<activeProfile>profile_id</activeProfile>
</activeProfiles>
相关问题
SNAPSHOT版本发布之后名称不对?依赖拉取不到?
snapshot版本上传到 maven 仓库之后,在 1.0-SNAPSHOT 文件夹下,默认保存的文件夹名是以时间戳命名的,这是正常的情况。客户端进行拉取snapshot版本包的时候,仓库默认返回最新版,并命名为 {project_name}.1.0-SNAPSHOT。
使用 mvn deploy 编译并发布到 maven 仓库
需要在 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>
<distributionManagement>
<repository>
<id>repo</id>
<url>http://123.123.132.123:8081/repository/maven-releases/</url>
</repository>
<snapshotRepository>
<id>repo</id>
<url>http://123.123.132.123:8081/repository/maven-snapshots/</url>
</snapshotRepository>
</distributionManagement>
如果仓库需要密码才能进行推送,那么上面的 distributionManagement.repository.id 和 distributionManagement.snapshotRepository.id 需要和 settings.xml 文件中的 servers.server.id 对应。