`

关于svn和maven结合使用的讨论

阅读更多
目前项目组在开发一个项目,由多个子模块构成,构建工具是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
<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上的编译错误

以上就是我的一点初步想法,大家有没有什么更好的意见?
分享到:
评论

相关推荐

    svn maven exp openExplorer adt egit 插件包

    本文将详细介绍标题中提到的几个关键工具:SVN、Maven、Eclipse(exp)、OpenExplorer、ADT以及EGit,并结合描述中的“link”安装方式进行讨论。 1. **SVN (Subversion)**:SVN是一种版本控制系统,用于跟踪和控制...

    jenkins插件(含svn和依赖等)

    通过插件机制,Jenkins 支持多种工具和技术,如 SVN、Git、Maven、Docker 等。 Subversion(SVN)是一个开源的版本控制系统,用于跟踪文件和目录的修改历史,便于团队协作开发。Jenkins SVN 插件是连接 Jenkins 和 ...

    专门用于配置window的intellj的svn

    标题“专门用于配置Windows的IntelliJ的SVN”意味着我们将讨论如何在Windows操作系统上设置和使用IntelliJ IDEA与Subversion的集成。下面将详细介绍这个过程: 1. **安装Subversion**: 首先,你需要在Windows上安装...

    myeclipse会用到的插件包括svn和gragle

    相比传统的Maven或Ant,Gradle提供了更灵活的构建脚本,支持Groovy和Kotlin DSL。在MyEclipse中使用Gradle插件,可以让开发者在IDE内管理构建过程,包括依赖管理、任务执行等。同样,下载Gradle插件后,放置到...

    springmvc-mybatis-maven集成

    这个"springmvc-mybatis-maven集成"的项目是一个很好的学习资源,旨在帮助开发者了解如何将这些技术有效地结合在一起。下面,我们将详细讨论这些知识点。 **SpringMVC** 是Spring框架的一个模块,专门用于处理Web...

    myeclipse 3.7 使用报告Ppt

    “myeclipse 3.7 使用报告Ppt” 指的是一份关于MyEclipse 3.7版本的使用教程或经验分享的PowerPoint演示文稿。MyEclipse是一款功能强大的集成开发环境(IDE),主要用于Java、J2EE、Web和移动应用的开发,它是...

    some links

    此外,版本控制工具通常与代码质量检查和代码格式化工具结合使用,例如SonarQube用于静态代码分析,ESLint和Prettier用于JavaScript代码的规范。还有像Postman这样的API测试工具,帮助开发者测试和文档化RESTful API...

    Eclipse 分卷7

    Eclipse 分卷7是关于Eclipse IDE的详细讨论,特别是关注Eclipse 4.4.2版本。Eclipse是一款广泛使用的开源集成开发环境(IDE),适用于多种编程语言,包括Java、C++、Python等。Eclipse 4.4.2,也被称为Luna Service ...

    持续集成工具Hudson入门介绍(结合Ant)

    【标签】:“源码”和“工具”这两个标签表明了本文会讨论源代码管理和使用的工具,特别是Hudson作为持续集成工具的应用。 【正文】: 1. **Hudson简介**:Hudson是一款基于Java的持续集成工具,提供了一个友好的...

    iteye的技术博客集合

    根据给定的信息,我们可以将这些知识点大致分为几个类别:数据库技术、Java Web 开发、Java 基础编程以及 Maven 和 Eclipse 的使用技巧等。接下来,我们将针对每一部分进行详细的阐述。 ### 数据库技术 #### ...

    nexus2.6.2+hudson3.0.1持续集成工具(1)

    在这个场景中,我们讨论的是两个知名的CI工具——Nexus和Hudson,它们在版本2.6.2和3.0.1中被提及。 Nexus是由Sonatype公司开发的一款强大的Maven仓库管理器。它不仅是一个存储库,还可以作为一个代理服务器,缓存...

    aa.rar_building_skillsoft

    最后,书中可能还会涉及一些高级话题,如Ant的脚本语言支持,如使用Groovy或Beanshell扩展Ant的功能,以及如何将Ant与其他构建工具(如Maven)结合使用,以实现更高效的项目管理。 在阅读《构建应用程序使用Ant 1.6...

    《javaWeb开发实战》源码

    了解如何配置和使用Maven或Gradle,可以方便地管理和构建JavaWeb项目。 11. **前端技术**:HTML、CSS和JavaScript是Web前端的基础,配合Ajax可以实现页面的异步更新。现代Web开发还会用到jQuery、Bootstrap、Vue.js...

    ant

    标签"源码"表明讨论可能涉及Ant如何与源代码管理工具(如Git或SVN)集成,以及如何处理源代码的编译和打包。而"工具"标签则暗示了Ant作为开发工具链中的一部分,如何与其他工具(如Maven、Gradle)进行比较和选择。 ...

    为了复试_软件工程之一

    8. **工具和框架**:可能介绍常用的开发工具,如IDE(Eclipse、Visual Studio)、版本控制系统(Git、SVN)、自动化构建工具(Maven、Gradle)等。 9. **案例研究**:通过实际的软件项目案例,分析和讨论软件工程在...

    java designer

    在实际开发中,Java Designer可能与其他工具如Maven、Gradle等构建工具,以及JUnit、Mockito等测试工具结合使用,以实现完整的开发流程。 **学习和应用**:掌握Java Designer需要理解其核心功能和工作原理,熟悉...

    eclipse从入门到精通 part2

    《Eclipse从入门到精通 Part2》是针对Java开发工具Eclipse的深入学习教程,旨在帮助初学者和有一定基础的开发者提升对Eclipse的使用技巧和理解。在本部分教程中,我们将围绕Eclipse的高级特性、项目管理、调试、插件...

    Eclipse in Action

    《Eclipse in Action》这本书是关于Eclipse集成开发环境(IDE)的一本实践指南,它深入浅出地介绍了如何高效地使用Eclipse进行软件开发。Eclipse作为一个强大的开源平台,被广泛应用于Java、C++、Python等众多编程...

    《精通NetBeans——Java桌面、Web与企业级程序开发详解》光盘(第1-14章)源代码

    5. **Chapter 07**:可能涉及到Maven或Ant等构建工具的使用,这对于大型项目的管理和部署至关重要。通过代码,读者可以学习如何在NetBeans中集成这些工具,自动化构建流程。 6. **Chapter 08**:可能讨论了单元测试...

    Java代码审查工具

    6. **Crucible**:Atlassian的Crucible是一个强大的代码审查工具,支持多种版本控制系统,如Git和SVN。它提供了web界面,便于团队成员进行代码审查和讨论。 7. **GitLab和GitHub的Pull Request功能**:这些版本控制...

Global site tag (gtag.js) - Google Analytics