发布制品到私服 Nexus

简介: 使用maven deploy的方式,将通用的模块打成 jar 包,发布到 Nexus 服务,让其他的项目来引用,以简洁、高效的方式来实现 jar 复用和管理。

1. 概述


在项目中,有些通用的代码模块,有时候不想通过拷贝这么简单的方式粗暴地实现复用。因为这样不仅体现不了 jar 包的 class 变更的实时性,而且也不利于 jar 统一管理。使用maven deploy的方式,将通用的模块打成 jar 包,发布到 Nexus 服务,让其他的项目来引用,以简洁、高效的方式来实现 jar 复用和管理。


2.  maven 的 settings.xml 文件中设置<server>标签


找到 Maven 安装目录的settings.xml文件


C:\devtools\maven-3.5.0\conf\settings.xml


添加如下配置


<server>
   <id>deploy-release</id>
   <username>admin</username>
   <password>admin123</password>
</server>
<server>
    <id>deploy-snapshot</id>
    <username>admin</username>
    <password>admin123</password>
</server>


此处,是设置的账号和密码都是 Nexus 服务的登录的账号和密码


3. 配置项目的 pom.xml 文件


在项目的 pom.xml 文件添加如下配置


<distributionManagement>
      <repository>
          <id>nexus-releases</id>
          <name>Nexus Release Repository</name>
          <url>http://127.0.0.1:8081/repository/maven-releases/</url>
      </repository>
      <snapshotRepository>
          <id>nexus-snapshots</id>
          <name>Nexus Snapshot Repository</name>
          <url>http://127.0.0.1:8081/repository/maven-snapshots/</url>
      </snapshotRepository>
</distributionManagement>

这里的 IP 地址127.0.0.1 需要根据具体情况换成对应的 IP 地址。点开下图框住的仓库,即可找到这两个仓库地址。


微信图片_20220504100840.png


另外,<server>中的<id>要和<repository>、<snapshotRepository><id>一致,maven 在发布时,会根据此 id 来查找相应的账号密码进行登录验证并上传文件。


4. 发布 jar 到 Nexus 服务


在项目的更目录,执行如下命令


mvn deploy


出入以下信息表示发布成功


[INFO] Uploaded: http://127.0.0.1:8081/repository/maven-snapshots/com/omg/olive-web/0.0.1-SNAPSHOT/olive-web-0.0.1-20220319.104535-1.pom (1.4 kB at 2.6 kB/s)
[INFO] Downloading: http://127.0.0.1:8081/repository/maven-snapshots/com/omg/olive-web/maven-metadata.xml
[INFO] Uploading: http://127.0.0.1:8081/repository/maven-snapshots/com/omg/olive-web/0.0.1-SNAPSHOT/maven-metadata.xml
[INFO] Uploaded: http://127.0.0.1:8081/repository/maven-snapshots/com/omg/olive-web/0.0.1-SNAPSHOT/maven-metadata.xml (766 B at 2.5 kB/s)
[INFO] Uploading: http://127.0.0.1:8081/repository/maven-snapshots/com/omg/olive-web/maven-metadata.xml
[INFO] Uploaded: http://127.0.0.1:8081/repository/maven-snapshots/com/omg/olive-web/maven-metadata.xml (276 B at 938 B/s)
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 8.125 s
[INFO] Finished at: 2022-03-19T18:45:38+08:00
[INFO] Final Memory: 15M/37M
[INFO] ------------------------------------------------------------------------

在 Nexus 服务也看到发布的 jar 包


微信图片_20220504100846.png


5. 发布的灵活配置


maven 会判断版本后面是否带了-SNAPSHOT,如果带了就发布到 snapshots 仓库,否则发布到 release 仓库。这里可以在 pom.xm l文件中,设置


<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>
    <groupId>com.omg</groupId>
    <artifactId>olive-web</artifactId>
    <version>${project.release.version}</version>
    <packaging>jar</packaging>
    <name>olive-web</name>
    <properties>
        <java.version>1.8</java.version>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.release.version>1.0.0-SNAPSHOT</project.release.version>
    </properties>
    <profiles>
         <profile>
             <id>product</id>
             <properties>
                 <project.release.version>1.0.0</project.release.version>
             </properties>
        </profile>
    </profiles>
    <dependencies>
    </dependencies>
    <distributionManagement>
         <repository>
               <id>deploy-release</id>
               <name>Nexus Release Repository</name>
              <url>http://127.0.0.1:8081/repository/maven-releases/</url>
        </repository>
        <snapshotRepository>
               <id>deploy-snapshot</id>
               <name>Nexus Snapshot Repository</name>
               <url>http://127.0.0.1:8081/repository/maven-snapshots/</url>
         </snapshotRepository>
     </distributionManagement>
</project>


通过占位符 ${project.release.version}来控制需要发布的版本,用命令mvn deploy -P product,发布olive-web 的 1.0 版本到 releases 库。如果使用命令 mvn deploy,则默认使用 1.0.0-SNAPSHOT 版本号,将发布 olive-web 的 1.0.0-SNAPSHOT 版本到 snapshots 库。



  1. 部署到 snapshot 仓库时,jar 包会带上时间戳;maven 会自动取相应版本最新的jar包


  1. 重复部署 release 报错


[ERROR] Failed to execute goal org.apache.maven.plugins:maven-deploy-plugin:2.7:deploy (default-deploy) on project olive-web: Failed to deploy artifacts: Could not transfer artifact com.omg:olive-web:jar:1.0.0 from/to deploy-release (http://127.0.0.1:8081/repository/maven-releases/): Failed to transfer file: http://127.0.0.1:8081/repository/maven-releases/com/omg/olive-web/1.0.0/olive-web-1.0.0.jar. Return code is: 400, ReasonPhrase: Repository does not allow updating assets: maven-releases. -> [Help 1]


部署 release 仓库时,相同版本的 jar 包不能提交。因为 release 的部署策略是disable redeploy,不允许覆盖更新组件。


解决办法:升级一下版本号,再发布即可。

相关文章
|
开发工具 数据安全/隐私保护 git
Git报错 Incorrect username or password (access token) 的解决方式
Git报错 Incorrect username or password (access token) 的解决方式
3135 0
Git报错 Incorrect username or password (access token) 的解决方式
|
人工智能 自然语言处理 Serverless
阿里云函数计算 x NVIDIA 加速企业 AI 应用落地
阿里云函数计算与 NVIDIA TensorRT/TensorRT-LLM 展开合作,通过结合阿里云的无缝计算体验和 NVIDIA 的高性能推理库,开发者能够以更低的成本、更高的效率完成复杂的 AI 任务,加速技术落地和应用创新。
792 14
|
运维 监控 安全
自动化运维:使用Ansible简化日常任务
【9月更文挑战第19天】在现代IT架构中,自动化运维是提升效率和减少人为错误的关键。本文将介绍如何使用Ansible这一强大的自动化工具来简化日常运维任务,包括安装软件、配置系统和应用部署等。通过实际的代码示例,我们将展示如何编写简单的Ansible playbook来实现这些任务,并讨论其在真实场景中的应用价值。
217 5
|
机器学习/深度学习 数据采集 算法
Python使用随机森林模型进行电影评分预测
Python使用随机森林模型进行电影评分预测
1884 1
Python使用随机森林模型进行电影评分预测
|
JavaScript 前端开发 安全
如何在 Vue 页面中禁止选择、右键、复制及 F12 开发者工具
【10月更文挑战第3天】 在前端开发中,保护页面内容不被随意复制或查看是一个常见需求。本文介绍了如何在 Vue 应用中实现禁止文本选择、右键菜单、复制操作以及 F12 开发者工具的方法。通过结合 CSS 和 JavaScript 事件监听,我们可以增加用户查看和复制内容的难度,尽管无法完全阻止高级用户。适当的防护措施可以为内容提供一层额外的保护,帮助开发者提升页面安全性。
1642 0
|
缓存 Java 应用服务中间件
苍穹外卖知识点总结(springboot)
苍穹外卖知识点总结(springboot)
3073 0
|
运维 数据安全/隐私保护 网络协议
【网络建设与运维】2024年河北省职业院校技能大赛中职组“网络建设与运维”赛项例题(一)
【网络建设与运维】2024年河北省职业院校技能大赛中职组“网络建设与运维”赛项例题(一)
【网络建设与运维】2024年河北省职业院校技能大赛中职组“网络建设与运维”赛项例题(一)
|
JSON Java 应用服务中间件
利用esaypoi自定义Excel表格模板导入与导出表单数据
今天工作中又遇到了excel导出数据的功能,在这里我将自己自定义的Excel模板和相关的代码拿出来,解释一下如何进行操作,以便日后能够方便的进行功能开发,提高效率。
1532 0
|
XML 设计模式 Java
PowerMock的静态方法与私有方法怎么测试?
**PowerMock**是Java单元测试中的增强工具,扩展了Mockito,支持模拟静态方法、构造函数、私有方法和final类,促进更高测试覆盖率。它用于隔离依赖,测试静态方法和私有方法。常见问题包括配置复杂性、过度使用、忽略真实行为模拟和最佳实践。解决方案包括遵循官方文档、谨慎使用、精确模拟和测试后清理。示例展示了如何模拟静态方法,通过添加PowerMock依赖和使用`@RunWith(PowerMockRunner.class)`、`@PrepareForTest`注解,以及`PowerMockito.mockStatic()`进行静态方法模拟。
487 0
|
算法 计算机视觉
【OpenCV】仿射变换中cv2.estimateAffine2D 的原理
【OpenCV】仿射变换中cv2.estimateAffine2D 的原理
984 0