maven发布项目到私服-snapshot快照库和release发布库的区别和作用及maven常用命令

简介: maven发布项目到私服-snapshot快照库和release发布库的区别和作用及maven常用命令在日常的工作中由于各种原因,会出现这样一种情况,某些项目并没有打包至mvnrepository。如果采用原始直接打包放到lib目录的方式进行处理,便对项目的管理带来一些不必要的麻烦。

maven发布项目到私服-snapshot快照库和release发布库的区别和作用及maven常用命令

在日常的工作中由于各种原因,会出现这样一种情况,某些项目并没有打包至mvnrepository。如果采用原始直接打包放到lib目录的方式进行处理,便对项目的管理带来一些不必要的麻烦。例如版本升级后需要重新打包并,替换原有jar包等等一些额外的工作量和麻烦。为了避免这些不必要的麻烦,通常我们会通过Nexus搭建私有的仓库。下面着重介绍下怎么通过mvn命令将程序打包并发布到私有仓库Nexus中。

前提:

  • 已成功安装maven
  • 已成功安装Nexus,(管理帐号:admin,密码:admin123)
  • 项目通过maven进行管理

maven安装目录下setting.xml中添加如下配置

servers节点中添加:

<server>
    <id>releases</id>
    <username>admin</username>
    <password>admin123</password>
  </server>
  <server>
    <id>snapshots</id>
    <username>admin</username>
    <password>admin123</password>
  </server>

注意:如果非admin用户,需要在Nexus中对相应的帐号设置密码

  • 打开安全设置:http://localhost:8081/nexus/#security-users
  • 选择相应的用户-->右键-->reset password/set password-->进行密码设置
  • 相应的仓库允许重新发布(Repositories-->选择相应的仓库-->Configuration-->Deployment Policy下拉选项中选择“Allow Redeploy”),如果不允许重新发布,重新发布时会出现401等异常情况。

项目下pom.xml中添加如下内容

<!-- 项目发布管理 -->
<distributionManagement>
  <repository>
    <id>releases</id>
    <name>User Project Release</name>
    <url>http://127.0.0.1:8081/nexus/content/repositories/releases/</url>
  </repository>

  <snapshotRepository>
    <id>snapshots</id>
    <name>User Project SNAPSHOTS</name>
    <url>http://127.0.0.1:8081/nexus/content/repositories/snapshots/</url>
  </snapshotRepository>
</distributionManagement>

发布到私服

切换至项目根目录后运行:mvn clean deploy -X -Dmaven.test.skip=true即可。如果发布成功会出现BUILD SUCCESS的字样。查看仓库http://127.0.0.1:8081/nexus/content/repositories/releases/已经包含了相应的包。

注意:

  • 如果想发布到snapshot仓库中,则需要在版本号后加上-SNAPSHOT(注意这里必须是大写)

如:

<groupId>cc.mzone</groupId>
<artifactId>m1</artifactId>
<version>0.1-SNAPSHOT</version>
<packaging>jar</packaging>

maven中snapshot快照库和release发布库的区别和作用

可参考 maven中snapshot快照库和release发布库的区别和作用

在使用maven过程中,我们在开发阶段经常性的会有很多公共库处于不稳定状态,随时需要修改并发布,可能一天就要发布一次,遇到bug时,甚至一天要发布N次。我们知道,maven的依赖管理是基于版本管理的,对于发布状态的artifact,如果版本号相同,即使我们内部的镜像服务器上的组件比本地新,maven也不会主动下载的。如果我们在开发阶段都是基于正式发布版本来做依赖管理,那么遇到这个问题,就需要升级组件的版本号,可这样就明显不符合要求和实际情况了。但是,如果是基于快照版本,那么问题就自热而然的解决了,而maven已经为我们准备好了这一切。

maven中的仓库分为两种,snapshot快照仓库和release发布仓库。snapshot快照仓库用于保存开发过程中的不稳定版本,release正式仓库则是用来保存稳定的发行版本。定义一个组件/模块为快照版本,只需要在pom文件中在该模块的版本号后加上-SNAPSHOT即可(注意这里必须是大写),如下:

<groupId>cc.mzone</groupId>
<artifactId>m1</artifactId>
<version>0.1-SNAPSHOT</version>
<packaging>jar</packaging>

maven2会根据模块的版本号(pom文件中的version)中是否带有-SNAPSHOT来判断是快照版本还是正式版本。如果是快照版本,那么在mvn deploy时会自动发布到快照版本库中,而使用快照版本的模块,在不更改版本号的情况下,直接编译打包时,maven会自动从镜像服务器上下载最新的快照版本。如果是正式发布版本,那么在mvn deploy时会自动发布到正式版本库中,而使用正式版本的模块,在不更改版本号的情况下,编译打包时如果本地已经存在该版本的模块则不会主动去镜像服务器上下载。

所以,我们在开发阶段,可以将公用库的版本设置为快照版本,而被依赖组件则引用快照版本进行开发,在公用库的快照版本更新后,我们也不需要修改pom文件提示版本号来下载新的版本,直接mvn执行相关编译、打包命令即可重新下载最新的快照库了,从而也方便了我们进行开发。


jar包发布到指定仓库

mvn deploy:deploy-file -DgroupId=com.xy.oracle -DartifactId=ojdbc14 -Dversion=10.2.0.4.0 -Dpackaging=jar -Dfile=E:\ojdbc14.jar -Durl=http://127.0.0.1:8081/nexus/content/repositories/thirdparty/ -DrepositoryId=thirdparty

jar包发布到本地缓存仓库

mvn install -Dmaven.test.skip=true

注意:

  • 如果出现400,需要注意项目下的pom.xml文件和maven使用的setting.xml文件的配置是否一致。
  • 如果出现401,需要检查maven使用的setting.xml中的帐号和密码是否正确,相应的repository是否为“Allow Redeploy”。
  • 如果使用的intellij、eclipse或myeclipse需要注意ide中使用的setting.xml和maven命令行下的setting.xml是否一致;否则或出现许多莫名其妙的问题。

参考文档:

相关文章
|
28天前
|
Java Maven
手把手教你搭建Maven项目
手把手教你搭建Maven项目
28 0
|
2月前
|
Java Maven
java修改当前项目的maven仓库地址为国内
修改当前项目的maven仓库地址为国内
|
3月前
|
Dubbo Java 应用服务中间件
微服务框架(十)Maven Archetype制作Dubbo项目原型
  此系列文章将会描述Java框架Spring Boot、服务治理框架Dubbo、应用容器引擎Docker,及使用Spring Boot集成Dubbo、Mybatis等开源框架,其中穿插着Spring Boot中日志切面等技术的实现,然后通过gitlab-CI以持续集成为Docker镜像。   本文为Maven Archetype的制作及使用,使用archetype插件制作Dubbo项目原型
|
22天前
|
Java Maven 开发工具
maven导入项目出现Unable to import maven project: See logs for details
maven导入项目出现Unable to import maven project: See logs for details
11 0
maven导入项目出现Unable to import maven project: See logs for details
|
21天前
|
Java Maven
运行maven项目出现Error:java: JDK isn‘t specified for module ‘XXX‘
运行maven项目出现Error:java: JDK isn‘t specified for module ‘XXX‘
11 0
|
26天前
|
Java Devops Maven
云效常见问题之maven库代理更换调改如何解决
云效(CloudEfficiency)是阿里云提供的一套软件研发效能平台,旨在通过工程效能、项目管理、质量保障等工具与服务,帮助企业提高软件研发的效率和质量。本合集是云效使用中可能遇到的一些常见问题及其答案的汇总。
20 2
|
28天前
|
JavaScript Java 关系型数据库
实例!使用Idea创建SSM框架的Maven项目
实例!使用Idea创建SSM框架的Maven项目
30 0
|
2月前
|
Java 测试技术 Maven
maven的package、install、deploy命令
maven的package、install、deploy命令
|
2月前
|
Java Maven
Maven项目模块打包引入
Maven项目模块打包引入
25 0
|
2月前
|
Java Linux Apache
Maven的Binary与Source区别
Maven的Binary与Source区别
41 1