当前位置: 代码网 > it编程>编程语言>Java > Maven 自动化部署

Maven 自动化部署

2026年09月08日 Java 我要评论
一句话总结:mvn deploy = 自动打包 + 上传 + 发布到远程仓库,配合 nexus / github packages / docker registry 实现 一键部署!一、部署目标目标

一句话总结:
mvn deploy = 自动打包 + 上传 + 发布到远程仓库,配合 nexus / github packages / docker registry 实现 一键部署!

一、部署目标

目标命令结果
发布 jar/warmvn deploy上传到 nexus
发布 snapshotmvn deploy -u动态更新
发布正式版mvn release:perform打 tag + 发布
docker 镜像mvn deploy推送到 registry
k8s 部署helm upgrade滚动更新

二、核心配置:distributionmanagement

pom.xml中配置

<distributionmanagement>
    <!-- snapshot 仓库 -->
    <snapshotrepository>
        <id>nexus-snapshots</id>
        <url>http://nexus.company.com/repository/maven-snapshots/</url>
    </snapshotrepository>
    <!-- 正式版仓库 -->
    <repository>
        <id>nexus-releases</id>
        <url>http://nexus.company.com/repository/maven-releases/</url>
    </repository>
</distributionmanagement>

maven 自动判断:1.0.0-snapshot → snapshotrepository
1.0.0 → repository

三、认证配置:settings.xml

~/.m2/settings.xml

<settings>
  <servers>
    <!-- 与 pom.xml 中的 <id> 一致 -->
    <server>
      <id>nexus-snapshots</id>
      <username>admin</username>
      <password>admin123</password>
    </server>
    <server>
      <id>nexus-releases</id>
      <username>admin</username>
      <password>admin123</password>
    </server>
  </servers>
</settings>

安全建议:ci 环境使用加密密码或 token

四、发布命令大全

命令作用
mvn deploy发布到远程仓库
mvn deploy -u强制更新 snapshot
mvn deploy -dskiptests跳过测试发布
mvn deploy -prelease激活正式版 profile

五、部署到不同仓库

1.nexus 私有仓库(企业推荐)

<distributionmanagement>
  <repository>
    <id>nexus-releases</id>
    <url>http://nexus:8081/repository/maven-releases/</url>
  </repository>
  <snapshotrepository>
    <id>nexus-snapshots</id>
    <url>http://nexus:8081/repository/maven-snapshots/</url>
  </snapshotrepository>
</distributionmanagement>

2.github packages

<distributionmanagement>
  <repository>
    <id>github</id>
    <url>https://maven.pkg.github.com/owner/repo</url>
  </repository>
</distributionmanagement>

settings.xml

<server>
  <id>github</id>
  <username>your_github_username</username>
  <password>your_github_token</password>
</server>

3.docker registry(jar + 镜像)

<plugin>
  <groupid>com.spotify</groupid>
  <artifactid>dockerfile-maven-plugin</artifactid>
  <version>1.5.2</version>
  <executions>
    <execution>
      <id>push-image</id>
      <phase>deploy</phase>
      <goals><goal>push</goal></goals>
    </execution>
  </executions>
  <configuration>
    <repository>registry.company.com/${project.artifactid}</repository>
    <tag>${project.version}</tag>
  </configuration>
</plugin>

六、spring boot 项目一键部署

<build>
  <plugins>
    <plugin>
      <groupid>org.springframework.boot</groupid>
      <artifactid>spring-boot-maven-plugin</artifactid>
      <version>3.3.5</version>
      <executions>
        <execution>
          <goals><goal>repackage</goal></goals>
        </execution>
      </executions>
    </plugin>
  </plugins>
</build>
mvn clean deploy -dskiptests

输出:

target/my-app-1.0.0.jar → 上传到 nexus
docker 镜像 → 推送到 registry

七、自动化部署流程(ci/cd)

github actions 示例

name: deploy

on:
  push:
    tags:
      - 'v*'

jobs:
  deploy:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4

      - name: set up jdk 17
        uses: actions/setup-java@v4
        with:
          java-version: '17'
          distribution: 'temurin'

      - name: deploy to nexus
        env:
          nexus_user: ${{ secrets.nexus_user }}
          nexus_pass: ${{ secrets.nexus_pass }}
        run: |
          mvn -b deploy -dskiptests \
            -s $github_workspace/settings.xml

      - name: build & push docker
        run: |
          docker build -t registry.company.com/my-app:${{ github.ref_name }} .
          echo ${{ secrets.registry_pass }} | docker login -u ${{ secrets.registry_user }} --password-stdin registry.company.com
          docker push registry.company.com/my-app:${{ github.ref_name }}

八、k8s 自动部署(helm)

helm/values.yaml

image:
  repository: registry.company.com/my-app
  tag: "1.0.0"

部署命令

helm upgrade --install my-app ./helm-chart

九、maven release 插件(自动化版本发布)

<plugin>
  <groupid>org.apache.maven.plugins</groupid>
  <artifactid>maven-release-plugin</artifactid>
  <version>3.1.1</version>
  <configuration>
    <tagnameformat>v@{project.version}</tagnameformat>
    <autoversionsubmodules>true</autoversionsubmodules>
  </configuration>
</plugin>
# 1. 准备发布
mvn release:prepare

# 2. 执行发布
mvn release:perform

自动完成:

  • 版本升级
  • 打 git tag
  • mvn deploy
  • 版本回退到 snapshot

十、完整pom.xml部署配置

<distributionmanagement>
  <repository>
    <id>nexus-releases</id>
    <url>http://nexus:8081/repository/maven-releases/</url>
  </repository>
  <snapshotrepository>
    <id>nexus-snapshots</id>
    <url>http://nexus:8081/repository/maven-snapshots/</url>
  </snapshotrepository>
</distributionmanagement>
<build>
  <plugins>
    <plugin>
      <groupid>org.apache.maven.plugins</groupid>
      <artifactid>maven-deploy-plugin</artifactid>
      <version>3.1.1</version>
    </plugin>
  </plugins>
</build>

十一、常见问题解决

问题解决方案
401 unauthorized检查 settings.xml <id> 匹配
snapshot 不更新mvn deploy -u
docker 推送失败docker login 测试
release 失败mvn release:clean 清理

十二、一句话总结

“mvn deploy + distributionmanagement + settings.xml = 一键发布全自动!”

恭喜!你已掌握 maven 自动化部署!

到此这篇关于maven 自动化部署的文章就介绍到这了,更多相关maven 自动化部署内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2026  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com