maven配置之:<distributionManagement>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>  

maven会根据模块的版本号(pom文件中的version)中是否带有-SNAPSHOT来判断是快照版本还是正式版本*。

如果是快照版本,那么在mvn deploy时会自动发布到快照版本库中,而使用快照版本的模块,在不更改版本号的情况下,直接编译打包时,maven会自动从镜像服务器上下载最新的快照版本。

如果是正式发布版本,那么在mvn deploy时会自动发布到正式版本库中,而使用正式版本的模块,在不更改版本号的情况下,编译打包时如果本地已经存在该版本的模块则不会主动去镜像服务器上下载。

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

接下来要介绍的是如何在项目中应用snapshot和release库,应用snapshot和release库达到不同环境下发布不同的版本的目的,首先看一个pom文件的定义:

<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/maven-v4_0_0.xsd">  <modelVersion>4.0.0</modelVersion>  <groupId>net.aty.mybatis</groupId>  <artifactId>mybatis-demo</artifactId>  <packaging>jar</packaging>  <version>${project.release.version}</version>  <name>mybatis-demo</name>  <url>http://maven.apache.org</url>  <properties>  <project.release.version>0.1-SNAPSHOT</project.release.version>  </properties>  <profiles>  <profile>  <id>release</id>  <properties>  <project.release.version>0.1</project.release.version>  </properties>  </profile>  </profiles>  <!--定义snapshots库和releases库的nexus地址-->  <distributionManagement>  <repository>  <id>nexus-releases</id>  <url>  http://172.17.103.59:8081/nexus/content/repositories/releases/  </url>  </repository>  <snapshotRepository>  <id>nexus-snapshots</id>  <url>  http://172.17.103.59:8081/nexus/content/repositories/snapshots/  </url>  </snapshotRepository>  </distributionManagement>  </project>  

首先我们看到pom文件中version的定义是采用占位符的形式,这样的好处是可以根据不同的profile来替换版本信息,比如maven默认是使用0.1-SNAPSHOT作为该模块的版本。

1、如果在发布时使用mvn deploy -P release 的命令,那么会自动使用0.1作为发布版本,那么根据maven处理snapshot和release的规则,由于版本号后不带-SNAPSHOT故当成是正式发布版本,会被发布到release仓库;

2、如果发布时使用mvn deploy命令,那么就会使用默认的版本号0.1-SNAPSHOT,此时maven会认为是快照版本,会自动发布到快照版本库。

在distributionManagement段中配置的是snapshot快照库和release发布库的地址,我这里是采用nexus作为镜像服务器。对于版本库主要是id和url的配置,配置完成后就可以通过mvn deploy进行发布了,当然了,如果你的镜像服务器需要用户名和密码,那么还需要在maven的settings.xml文件中做如下配置:

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

注意这里配置的server的id必须和pom文件中的distributionManagement对应仓库的id保持一致,maven在处理发布时会根据id查找用户名称和密码进行登录和文件的上传发布。

我们这里通过profile的定义就可以在发布灵活切换snapshot快照版本和release正式版本了,在被依赖的组件中也可以使用profile来定义在开发阶段使用快照库,在发布阶段使用正式库的功能,只需要在不同的profile中覆盖默认的properties属性值即可。

参考:http://blog.csdn.net/aitangyong/article/details/53332091

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/555544.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

maven-compiler-plugin 插件详解

作用&#xff1a;指定maven编译的jdk版本和字符集,如果不指定,maven3默认用jdk 1.5 maven2默认用jdk1.3 <plugin> <!-- 指…

面试常见java异常题_Java异常面试题(含答案)

1、Java中异常分为哪两种&#xff1f;编译时异常运行时异常2、异常的处理机制有几种&#xff1f;异常捕捉&#xff1a;try…catch…finally&#xff0c;异常抛出&#xff1a;throws。3、如何自定义一个异常继承一个异常类&#xff0c;通常是RumtimeException或者Exception4、tr…

maven打包插件:maven-compiler-plugin、maven-dependency-plugin、maven-jar-plugin、maven-resources-plugin详解

最近开发的产品&#xff0c;我们是有四五个maven模块&#xff0c;开发阶段一直是在eclipse中运行的&#xff0c;然后快发版的时候&#xff0c;需要把这些项目打成jar包&#xff0c;通过命令去启动&#xff0c;那首先就得把这些模块项目打包&#xff0c;或者拷贝一些资源文件等等…

Java Web访问.action_java设置web首页访问action

index.jsp一般首页进的是静态页面如果需要首页是动态的页面 就需要先进action访问数据 再回到首页显示因为 welcome-file 必须是实际存在的文件&#xff0c;不能是action或者servlet路径如果直接把index.jsp改成action 会出现404index.action直接设置action&#xff0c;404和s…

spring boot中打包插件spring-boot-maven-plugin和maven-jar-plugin的关联

简介 用spring boot快速开发时&#xff0c;通常用spring-boot-maven-plugin插件将springboot的应用程序打包成jar文件&#xff0c;然后通过java -jar运行&#xff0c;很方便。但是如果是部署到服务器上&#xff0c;每次更改代码后替换的包都比较大&#xff0c;至少30MB以上&am…

简化java_JAVA之旅-简化java开发

为了降低java开发的复杂性&#xff0c;spring采取了以下4种关键策略基于POJO的轻量级和最小侵入行编程为使不让应用与框架绑死&#xff0c;一个bean不会实现&#xff0c;继承或者导入Spring API相关的任何东西&#xff0c;只是一个普通的java对象。2. 通过依赖注入和面相接口实…

Maven父子结构的项目依赖使用以及打包依赖_微服务项目(maven父子级项目)怎么打包

Maven父子结构的项目依赖使用以及打包依赖 1&#xff1a;在父子结构项目中&#xff0c;如果要是用其他模块的类。在当前项目中的pom中 加入 其他模块的配置 <dependency><groupId>com.spring.mySpring</groupId><artifactId>mySpring-utils</artif…

搭建一个完整的微服务项目

一.项目技术架构 1.技术栈 前台技术 Node.js、Npm、Vue.js、WebPack、Vue Cli、Element UI 后台架构 微服务架构&#xff1a;按照功能拆分N多个服务&#xff0c;每个服务可以独立技术选型,独立开发,独立部署,独立运维.&#xff0c;单个服务使用基于ssm的springboot&#xff0…

java 雅思_基于JAVA的雅思考试管理系统的设计与实现(SSH,MySQL)(含录像)

基于JAVA的雅思考试管理系统的设计与实现(SSH,MySQL)(含录像)(任务书,毕业论文12000字,程序代码,MySQL数据库)本文分析了基于JAVA的雅思考试管理系统的设计与实现技术&#xff0c;结合实际提出了本系统的总体结构设计和主要模块的功能实现。本系统分为二个子系统:管理员子系统&…

java开发利器 源码_Java开发的利器: 反编译工具 JD-GUI

老赵说起来也能算个Java程序员&#xff0c;可是写过的Java代码并不多&#xff0c;可老赵实实在在是从程序员干起的。虽然肚子里也装了不少的东西&#xff0c;可作为一件乐此不疲的事情&#xff0c;就是看那些所谓“高人”的代码。高人们的行事风格&#xff0c;十人十样&#xf…

Maven搭建Nexus私服

私服的介绍 1 什么是私服 私服是一种特殊的远程仓库&#xff0c;它是架设在局域网的仓库服务&#xff0c;私服代理广域网上的远程仓库&#xff0c;供局域网使用。 在企业开发中&#xff0c;私服的建设是有必要的&#xff0c;其好处如下&#xff1a; 1.1 节省资金、外网带宽…

java类加载面试题_java 类加载过程?【面试题详解】

今天爱分享给大家带来java 类加载过程?【面试题详解】&#xff0c;希望能够帮助到大家。java 类加载需要经历一下 7 个过程:加载加载时类加载的第一个过程&#xff0c;在这个阶段&#xff0c;将完成一下三件事情: 1. 通过一个类的全限定名获取该类的二进制流。2. 将该二进制流…

Java中Calendar类的常用方法

Calendar类常用方法的记录&#xff1a; 获取时间 // 使用默认时区和语言环境获得一个日历Calendar cal Calendar.getInstance();// 赋值时年月日时分秒常用的6个值&#xff0c;注意月份下标从0开始&#xff0c;所以取月份要1System.out.println("年:" cal.get(Cal…

Java啤酒生产系统描述_Java描述设计模式(03):工厂方法模式

一、工厂方法模式1、生活场景系统常见的数据导出功能&#xff1a;数据导出PDF、WORD等常见格式。2、工厂方法模式是类的创建模式&#xff0c;又叫做虚拟构造子(Virtual Constructor)模式或者多态性工厂(Polymorphic Factory)模式。工厂方法模式的用意是定义一个创建产品对象的工…

@Autowired(required=false)注入注意的问题

1、前言 在使用spring开发过程中&#xff0c;我们基本上都是使用Autowired这个注解&#xff0c;用来注入已有的bean。但是有些时候&#xff0c;会注入失败。当我们加上参数&#xff08;requiredfalse&#xff09;就能解决。今天整理一个我在实际开发中的例子 2、required属性…

jna enum 对应 java_JNA简单使用

近期使用Java开发有关于摄像机接收到数据的上传&#xff0c;因为摄像机处理图像是用C语言实现的&#xff0c;所以开发需要用到JNA&#xff0c;实现JAVA对C语言的回调,因为具体的开发方式官方文档里面有示例&#xff0c;所以本文只是简单的把需要注意的点罗列出来。一、 定义JNA…

java if经典程序_java经典程序(11-20)

package question;import java.util.Scanner;public class Test11_20 {/** 输入一个数据n&#xff0c;计算斐波那契数列的第n个值 并打印所以值* 1 1 2 3 5 8 13* 规律一个数等于前两个数之和*/public void test11(){Scanner sc new Scanner(System.in);int n sc.nextInt();i…

什么是ip地址、子网掩码、网关和DNS?

什么是ip地址、子网掩码、网关和DNS&#xff1f; 什么是ip地址&#xff1f; IP是32位二进制数据&#xff0c;通常以十进制表示&#xff0c;并以“.”分隔。IP地址是一种逻辑地地址&#xff0c;用来标识网络中一个个主机&#xff0c;IP有唯一性&#xff0c;即每台机器的IP在全…

mysql binlog update_mysql binlog 简单介绍与基于binlog数据恢复

mysql binlog 简单介绍与基于binlog数据恢复通过备份文件恢复binlog(本节重点)binlog 二进制日志文件show variables like log_bin;二进制日志文件(binary log) 记录了对mysql 数据库执行更改的所有操作, 但是不包括 select 和 show 这类操作,因为这类操作对数据本身没有修改. …

Dubbo:RPC原理

1、RPC原理 一次完整的RPC调用流程如下&#xff1a; 1&#xff09;服务消费方&#xff08;client&#xff09;调用以本地调用方式调用服务&#xff1b; 2&#xff09;client stub接收到调用后负责将方法、参数等组装成能够进行网络传输的消息体&#xff1b; 3&#xff09;clie…