mvn基于命令行推送包到私服

推送命令

mvn deploy \
    -DaltDeploymentRepository=nexus-snapshots::http://nexus.xxx.com/repository/maven-snapshots/

-DaltDeploymentRepository参数解释

1
-DaltDeploymentRepository=nexus-snapshots::default::http://nexus.xxx.com/repository/maven-snapshots/

是Maven Deploy Plugin的临时发布仓库配置完整格式:

1
-DaltDeploymentRepository=<id>::<layout>::<url>

拆解:

部分 示例 含义
id nexus-snapshots 仓库唯一标识,对应 Maven settings.xml 的 server id
layout default 仓库布局类型
url http://nexus.xxx.com/repository/maven-snapshots/ 远程 Maven 仓库地址(注意不能是proxy/group地址)

1. id:nexus-snapshots

1
nexus-snapshots

用于关联认证信息。例如:
~/.m2/settings.xml

1
2
3
4
5
6
7
<servers>
<server>
<id>nexus-snapshots</id>
<username>admin</username>
<password>password</password>
</server>
</servers>

Maven deploy 时:

altDeploymentRepository.id
              |
              |
settings.xml.server.id

匹配后使用用户名密码。


2. default 是什么?

1
default

表示Maven 仓库布局类型(repository layout)

groupId
   ↓
artifactId
   ↓
version

例如:

1
2
3
4
com/pricealgo/
valuation-service-api/
0.0.1-SNAPSHOT/
valuation-service-api-0.0.1-SNAPSHOT.jar

对应:

1
2
3
<groupId>com.pricealgo</groupId>
<artifactId>valuation-service-api</artifactId>
<version>0.0.1-SNAPSHOT</version>

3. 为什么需要 default?

Maven Deploy Plugin 需要知道,如何把 GAV 坐标转换成目录结构。

例如:

1
2
3
<groupId>com.pricealgo</groupId>
<artifactId>valuation-service-api</artifactId>
<version>0.0.1-SNAPSHOT</version>

使用:

default layout

生成:

com/
 └── pricealgo/
      └── valuation-service-api/
            └── 0.0.1-SNAPSHOT/

4. 新版本 Maven 可以省略 default 吗?

可以Maven deploy plugin 3.x 推荐格式:

1
-DaltDeploymentRepository=nexus-snapshots::http://nexus.xxx.com/repository/maven-snapshots/

例如:

1
2
mvn deploy \
-DaltDeploymentRepository=nexus-snapshots::http://nexus.xxx.com/repository/maven-snapshots/

新版:

id::url

等价于:

id::default::url