搭建自己的 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 对应。

posted @ 2022-09-10 19:35  zolmk  阅读(1085)  评论(0编辑  收藏  举报