`

转载 :maven 和svn

阅读更多

目前项目组在开发一个项目,由多个子模块构成,构建工具是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代码 复制代码 收藏代码
  1. <snapshots>  
  2.                 <enabled>true</enabled>  
  3.                 <updatePolicy>always</updatePolicy>  
  4.             </snapshots>  
<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上的编译错误

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

  • 大小: 49.2 KB
分享到:
评论

相关推荐

    Maven更新失败,Cannot resolve plugin org.apache.maven.plugins:maven-compiler-plugin:3.1

    Maven更新问题 今天Maven在更新的时候发现一直更新不成功,总结下解决方法。 在apache-maven-3.5.2/conf/setting.xml中加入以下配置即可解决 alimaven aliyun maven ...

    打包之战:Maven maven-war-plugin 与 maven-jar-plugin 的较量

    Maven 是一个项目管理和构建自动化工具,主要服务于基于 Java 的项目。它由 Apache 软件基金会提供支持,用于管理项目构建、依赖和文档等过程。Maven 的设计灵感来源于早期的软件构建工具如 Ant,但它引入了一些新的...

    清洁的艺术:Maven maven-clean-plugin 的深度解析与应用

    Maven 是一个项目管理和构建自动化工具,主要服务于基于 Java 的项目。它由 Apache 软件基金会提供支持,用于管理项目构建、依赖和文档等过程。Maven 的设计灵感来源于早期的软件构建工具如 Ant,但它引入了一些新的...

    打造可执行的 Java 艺术品:Maven maven-jar-plugin 生成指南

    Maven 是一个项目管理和构建自动化工具,主要服务于基于 Java 的项目。它由 Apache 软件基金会提供支持,用于管理项目构建、依赖和文档等过程。Maven 的设计灵感来源于早期的软件构建工具如 Ant,但它引入了一些新的...

    Maven配置SVN的方法和SVN包全套

    Maven作为Java项目管理和构建工具,同样支持与SVN集成,以便于项目的版本控制和协同开发。本文将详细介绍如何配置Maven以使用SVN,并提供相关的配置文件示例。 一、Maven配置SVN基础 1. 添加 SVN 插件:在 Maven ...

    构建增强的艺术:Maven build-helper-maven-plugin的妙用

    Maven是一个项目管理和构建自动化工具,主要服务于基于Java的项目管理和构建。它由Apache软件基金会提供支持,被广泛应用于Java项目中,用于项目的依赖管理、构建过程管理和文档管理。 ### Maven的主要特点包括: ...

    Failed to execute goal org.apache.maven.plugins:maven-compiler

    在&lt;plugins&gt;&lt;/plugins&gt;中添加 &lt;groupId&gt;org.apache.maven.plugins &lt;artifactId&gt;maven-compiler-plugin &lt;version&gt;3.8.1 &lt;source&gt;1.8 &lt;target&gt;1.8 &lt;/plugin&gt;

    自动化构建的秘诀:Maven构建编号生成全解析

    Maven是一个项目管理和构建自动化工具,主要服务于基于Java的软件项目。它由Apache软件基金会提供支持,并广泛应用于Java开发者社区。Maven的主要特点包括: 1. **依赖管理**:Maven使用一个名为`pom.xml`的文件来...

    深入挖掘:Maven依赖树命令的终极指南与实战技巧

    Maven是一个项目管理和构建自动化工具,主要服务于基于Java的软件项目。它使用一个名为`pom.xml`的文件来描述项目的构建过程、依赖关系和其他配置信息。Maven的全称是"Model of Automation",即自动化模型。 ### ...

    项目版本管理的艺术:Maven versions-maven-plugin全解析

    Maven是一个项目管理和构建自动化工具,主要服务于基于Java的软件项目。它是由Apache软件基金会提供的一个开源工具,使用一种名为Project Object Model (POM) 的XML文件来描述项目的构建过程、依赖关系和其他配置...

    构建前端的利器:Maven与frontend-maven-plugin的深度集成

    Maven是一个项目管理和构建自动化工具,主要服务于基于Java的软件项目。它是由Apache软件基金会提供的一个开源工具,使用一种名为Project Object Model (POM) 的XML文件来描述项目的构建过程、依赖关系和其他配置...

    构建自动化的秘诀:Maven buildnumber-maven-plugin使用指南

    Maven是一个项目管理和构建自动化工具,主要服务于基于Java的软件项目。它是由Apache软件基金会提供的一个开源工具,使用一种名为Project Object Model (POM) 的XML文件来描述项目的构建过程、依赖关系和其他配置...

    maven&svn Plugin.zip

    在IT行业中,Maven和SVN是两个非常重要的工具,它们在软件开发流程中起着至关重要的作用。Maven是一个项目管理和综合工具,主要用于Java项目的构建、依赖管理和项目信息管理。而SVN(Subversion)则是一种版本控制...

    基于Maven+SVN自动打包

    本文将深入探讨如何结合Maven和SVN实现项目的自动打包流程,帮助开发者更有效地管理和部署代码。 【Maven】:Maven是一个强大的Java项目管理工具,它能够帮助开发者构建、管理和部署项目。Maven通过使用一个统一的...

    Jenkins编译报错Failed to execute goal org.apache.maven.plugins_maven-clean-plugin

    Failed to execute goal org.apache.maven.plugins:maven-clean-plugin:2.5:clean (default-clean) on project

    hudson+maven+svn自动化部署

    - **作用**: Maven 是一个项目管理和理解工具,帮助开发者更有效地构建和管理 Java 项目。 - **安装**: 解压 Maven 的安装包至指定目录,并设置环境变量。 - **环境变量设置**: - `M2_HOME`: Maven 的安装目录。...

    intellij+maven+svn环境的搭建

    在Java开发中,IntelliJ IDEA是一款备受推崇的集成开发环境(IDE),Maven是一个强大的项目管理和构建工具,而SVN则是常用的版本控制系统。本指南将详细介绍如何在Windows环境下搭建IntelliJ IDEA、Maven和SVN的开发...

    掌握JaCoCo:Maven项目代码覆盖率的终极指南

    Apache Maven 是一个软件项目管理和构建自动化工具,主要服务于基于Java的项目管理。它使用一个名为 POM(Project Object Model)的XML文件来描述项目的构建过程、依赖关系和其他配置信息。Maven 基于项目对象模型的...

    jenkins+maven+svn+springboot实现一件打包发布

    通过以上步骤,可以成功地使用 Jenkins、Maven、SVN 和 SpringBoot 实现一键式打包发布流程。这种方式极大地提高了软件开发过程中的自动化程度,减少了人工干预的机会,从而降低了错误率并提升了效率。在实际应用中...

    手把手图解,详解Jenkins ,svn ,maven 项目持续集成 SHELL 脚本

    **标题解析:** "手把手图解,详解...总结来说,本文将通过图文并茂的方式,详细讲解如何整合Jenkins、svn和Maven进行持续集成,并利用SHELL脚本提升自动化程度,为软件开发团队提供一套高效稳定的持续集成方案。

Global site tag (gtag.js) - Google Analytics