maven和svn区别
构建工具—maven,版本控制工具—svn。
一、只有svn的情况
首先考虑没有maven的情况。这样的话,项目组每个开发人员,都需要在本地check out所有的源码。
每次提交之前,需要先更新周边工程的代码。由于工程之间是依赖的,所以很可能需要把所有的代码都更新一遍。在项目依赖混乱的情况下,就更麻烦 ,等于说,项目组成员之间的协作,是以SVN为中心的
这种做法的缺点在于:
1、开发人员本地需要有所有的代码,编译速度很慢
2、如果是别人负责的模块出错,会影响自己的开发。如果项目比较大的话,别人负责的模块的问题,自己实际上是解决不了的
这种做法的优点在于:
1、提交之前做一次全量更新,相当于在本地做了一次全量编译,提交到SVN上基本可以保证不会出现编译错误。我称之为“悲观提交”,类似于数据库里“悲观锁”
2、由于本地有所有代码,所以本地构建比较不容易出错
二、引入maven的情况
maven的主要作用之一,就是对模块化开发的支持
开发人员A机器上可以只有工程A,开发人员B机器上只有工程B,其中工程B依赖工程A
只要工程A已经deploy到了远程仓库(私服),那么工程B就可以在本地构建,不需要有工程A的代码。也就是说,每个开发人员本地,都只需要check out自己负责的工程
这种做法的优点在于:
1、每个人只有自己负责的代码,本地构建的速度快
2、如果其他的模块构建出错,对自己的模块不容易造成影响
3、职责划分清晰
这种做法的缺点是:
1、高层模块的构建,依赖于低层的模块。由于开发人员B本地只有工程B的代码,如果工程A还没有deploy到远程仓库,则工程B就无法进行本地构建
2、提交到SVN后,有可能造成SVN上的全量编译失败。比如A删除了一个方法,并提交到svn,但是没有deploy。那么B就会基于A模块旧的构件来进行本地构建,成功后也提交了代码。这样的话,在svn上编译就无法通过
要避免发生以上的问题,我觉得在项目组内要遵循2个规定:
1、提交了代码,需要同时将模块deploy进远程仓库。以免造成远程仓库的构件与svn源代码的不一致
2、需要在pom里将构件更新的策略设置为always Xml代码
<snapshots>
<enabled>true</enabled>
<updatePolicy>always</updatePolicy>
</snapshots>
以上2个规定,第一个是解决提交不一致的问题,第二个是解决获取不一致的问题。目的都是为了避免构建成功,但是svn上全量编译失败的问题
由于是先提交,再发现是否SVN编译失败,所以我称之为“乐观提交”
三、比较
总的来说,上述两种方式的区别,关键在于:一种是本地有所有的代码;另一种是本地只有自己负责的代码
对于小项目来说,不存在这个问题。但是如果是比较大的项目,我认为后者是更优的,但是会引入一些额外的问题,需要项目组所有人遵循规范来避免
四、引入CI
结合使用svn和maven,如果引入CI的话,可以让这个过程更加容易
开发人员在本地构建成功之后,把代码提交到svn,由CI系统(比如hudson),来完成deploy的动作
或者,使用SCM插件,绑定到deploy阶段。在deploy成功之后,由插件完成提交svn的动作。这样也可以保证提交svn和deploy的一致性
如果提交之后,在svn上全量编译失败,那么CI系统也会第一时间通知相关人员
五、总结
1、建议采用分模块开发的方式,每个开发人员仅check out自己负责的代码
2、将snapshots更新策略设置为always
3、用ci系统或者scm插件,保证check in和deploy的一致性
4、依赖ci系统,来及时发现svn上的编译错误
maven和svn区别的更多相关文章
- Jenkins +Maven+Tomcat+SVN +Apache项目持续集成构建
详解Jenkins +Maven+Tomcat+SVN +Apache项目持续集成 一:前言 1. Jenkins jenkins版本大全http://mirrors.jenkins-ci.org/ ...
- Ubuntu杂记——Ubuntu下Eclipse搭建Maven、SVN环境
正在实习的公司项目是使用Maven+SVN管理的,所以转到Ubuntu下也要靠自己搭环境,自己动手,丰衣足食.步骤有点简略,但还是能理解的. 一.安装JDK7 打开终端(Ctrl+Alt+T),输入 ...
- 淘淘商城基于maven和svn的理解
首先了解下maven和svn是什么: Maven是一个项目的管理工具,它包含了一个项目对象模型 (Project Object Model),一组标准集合,一个项目的生命周期(Project Life ...
- 转:eclipse maven build、maven install 等区别
原文地址:eclipse maven build.maven install 等区别
- eclipse中的maven build、maven clean、maven install和maven test的区别
eclipse中的maven build.maven clean.maven install和maven test的区别 https://www.cnblogs.com/Marydon20170307 ...
- MyEclipse10.6、Maven、svn集成
这几天整理maven,根据开发部署需要,需要把原先的myeclipse下的普通javaWeb工程用maven管理,弄了2天,主要还是在jar包的引入上,总是少- -! 好了,下面记录一下我的安装过程: ...
- Git常用命令及使用,GitLab/GitHub初探,Git/Svn区别
Git安装配置及常用命令 0 Git本地分支管理 1 Git远程分支管理 2 Git Tag标签管理 3 Git Log日志 4 其它高级命令 5 常规使用及介绍 6 角色权限 7 分支定义 8 一般 ...
- Selenium+TestNG+Maven+Jenkins+SVN(转载)
转载自:https://blog.csdn.net/u014202301/article/details/72354069 一. 创建Maven项目,下载Selenium和TestNG的依赖(依赖可以 ...
- 搭建基于IDEA+Selenium+Java+TestNG+Maven+Jenkins+SVN的Web端UI自动化测试环境
第一步:工具下载安装配置 JDK安装与配置 IDEA安装与配置 Maven安装与配置 Tomcat部署与配置 Jenkins部署与配置 Svn安装与配置 各浏览器驱动下载与配置 第二步:集成各个工具到 ...
随机推荐
- 深度|作为C端应用的代表,成功的陌生社交应用是什么样子的?
作 为C端应用的代表,成功的陌生社交应用是什么样子的?活跃用户数?收益回报率?在实际社交产品设计中,我们一直为这些所谓的KPI左右,具体到设计行为 上:摆弄相应的界面元素,优化一下文案.页面流,但却很 ...
- 【Effective Java】9、使用EnumMap代替序数索引
package cn.xf.cp.ch02.item33; import java.util.EnumMap; import java.util.HashSet; import java.util.M ...
- C标准头文件<errno.h>
声明了错误处理相关的宏 errno errno即error number,在程序启动时被设为0,当某个库函数运行出现错误的时候,会将相应的能表达错误类型的数字赋值给这个左值,这些数字往往有相应的宏来表 ...
- Android 手机卫士3--设置中心
1.要点击九宫格中的条目,需要注册点击事件 // 注册九宫格单个条目的点击事件 gv_home.setOnItemClickListener(new OnItemClickListener() { / ...
- 【项目管理】图解GitHub基本操作
一.注册并登陆到github网站 1.1.打开github网站首页(https://github.com/) 1.2.注册一个自己的github账号 创建账户后再验证自己的邮箱,然后就可以登陆到git ...
- 在SharePoint 2013 之中使用JS从Add-in程序中读取用户配置文件的属性
经过无数次的实验,只有这个程序可以运行正常 ,代码贴出来纯的JSOM,在我的实验环境老是返回未知错误,为了这一个简单的任务,我已经搞了2天了,不过终于搞出来了,使用各种方法后,还有使用代码. func ...
- 多值(in),范围值(between..and)
多值检测 关键词[in] 查出年龄是23,24,28 的人员信息 select * from T_Employee where FAge in (23,25,28) in 后面如果跟子查询, ...
- 使用vscode访问和修改远程计算机文件
使用vscode访问和修改远程文件,分三步实现:在远程linux机器上安装rmate:在本地windows上安装openssh:在vscode中安装扩展remote vscode. 1. 在远程lin ...
- JAVA NIO Buffer
所谓的输入,输出,就是把数据移除或移入缓冲区. 硬件不能直接访问用户控件(JVM). 基于存储的硬件设备操控的是固定大小的数据块儿,用户请求的是任意大小的或非对齐的数据块儿. 虚拟内存:使用虚 ...
- Jsoup系列学习(2)-解析html文件
解析html文件 1.当我们通过发送http请求时,有时候返回结果是一个html格式字符串,你需要从一个网站获取和解析一个HTML文档,并查找其中的相关数据.你可以使用下面解决方法: 使用 Jsoup ...