侧边栏壁纸
博主头像
落叶人生博主等级

走进秋风,寻找秋天的落叶

  • 累计撰写 130562 篇文章
  • 累计创建 28 个标签
  • 累计收到 9 条评论
标签搜索

目 录CONTENT

文章目录

SVN Maven SCM 跟 release 插件的Spike

2022-07-01 星期五 / 0 评论 / 0 点赞 / 89 阅读 / 11512 字

背景: 在客户那边做的一个项目,我中途加入项目组,项目版本管理在SVN上,由于没有分主线,分支,与里程碑版本。在第一次上线时,上了SVN上的一个版本,后来对此次上线的SVN上的版本遗望了。在其后

背景:

    在客户那边做的一个项目,我中途加入项目组,项目版本管理在SVN上,由于没有分主线,分支,与里程碑版本。在第一次上线时,上了SVN上的一个版本,后来对此次上线的SVN上的版本遗望了。在其后的几次上线中,对于项目功能有部分功能未完成、不上线的、或要更新上部分功能这种情况,处理时简单在一个Checkout下来的最近版本项目进行更改来进行上线,其实还好没遇到一些大问题。另外碰到的一个问题是,上线的一些功能要配合其他项目组的上线的功能,例如一个为我们提供单点登录的项目组,他们上线,之前他们的单点登录在测试没有集群的环境,与我们项目测试环境经过测试是可以正常使用的。但是线上环境下就不一定了。我们要准备多一套上线的包,来应付对方如果上线功能有问题,我们系统还是缘用之前可以使用的功能。

    对于上面的情况,我们考虑到在版本控制管理上,确实还做得不够,要使用一些合理点的方式来进行管理。对于我个人,这也是在摸索之中,也没有什么最佳实践。于是有了这么一次的Spike,主要以实战为主,对于背后的理论大伙可以参考一些资料。凭借着对《maven in action》这本书的一些记忆。动手操作了一下^-^,在这其中也遇到了一些错误跟问题,这里跟分享一下。

实战:

创建一个SVN的Repository。 我这边使用的是VisualSVN Server, 一个很傻瓜很好用的SVN服务器^-^

Repositories右键,Create New Repository。输入spike-svn-maven、先下面标红的创建主干、分支、里程碑(标签)目录。

如上图创建一个名称为 spike-svn-maven的版本库URL为(https://xzf-pc:8083/svn/spike-svn-maven)。

然后进入到自己准备放工程的目录,我自己而言:e:/project/xzf_20130929/spike-svn-maven。

这些目录用小乌龟(TortoiseSVN客户端)根据上面创建完Repository后给出的SVN的URL,Checkout下来。

这个我们要的三个目录就准备好了。

进入e:/project/xzf_20130929/spike-svn-maven/trunk

打开CMD命令行。创建一个maven工程:

mvc archetype:create -DgroupId=com.fengzidm.spike -DartifactId=spike-svn-maven -DpackageName=com.fengzidm.spike

ps:这里我犯了一个错误是。这里创建了一个工程,会在trunk目录下产生 /trunk/spike-svn-manen/ .... 这样的目录。我后面忘记了将trunk/spkie-svn-maven里面的

东西全部剪切到trunk/下,并将spkie-svn-maven这个目录删除。导致了我后面使用release插件时,报找不到pom.xml文件的错误。

进行到这一步。我们打开生成工程的pom.xml文件,并修改成以下内容(根据我机器上的配置来进行的修改)


<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/xsd/maven-4.0.0.xsd">    <modelVersion>4.0.0</modelVersion>    <groupId>com.fengzidm.spike</groupId>    <artifactId>spike-svn-maven</artifactId>    <version>1.1-SNAPSHOT</version>    <packaging>jar</packaging>    <name>spike-svn-maven</name>    <url>http://maven.apache.org</url>    <properties>        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>    </properties>    <dependencies>        <dependency>            <groupId>junit</groupId>            <artifactId>junit</artifactId>            <version>3.8.1</version>            <scope>test</scope>        </dependency>    </dependencies>    <build>        <plugins>            <!-- release插件 -->            <plugin>                <groupId>org.apache.maven.plugins</groupId>                <artifactId>maven-release-plugin</artifactId>                <version>2.1</version>                <configuration>                    <!-- 设置分支跟里程碑的url -->                    <branchBase>https://localhost:8083/svn/spike-svn-maven/branches</branchBase>                    <tagBase>https://localhost:8083/svn/spike-svn-maven/tags</tagBase>                </configuration>            </plugin>        </plugins>    </build>        <!-- SCM配置 -->    <scm>        <url>https://localhost:8083/svn/spike-svn-maven/trunk</url>        <connection>scm:svn:https://localhost:8083/svn/spike-svn-maven/trunk</connection>        <developerConnection>scm:svn:https://localhost:8083/svn/spike-svn-maven/trunk</developerConnection>    </scm>    <!-- 配置release插件发布到我的Nexus仓库 -->    <distributionManagement>        <repository>            <id>nexus-releases</id>            <name>Nexus Releases Repository</name>            <url>http://localhost:8081/nexus/content/repositories/releases/</url>        </repository>        <snapshotRepository>            <id>nexus-snapshots</id>            <name>Nexus Snapshots Repository</name>            <url>http://localhost:8081/nexus/content/repositories/snapshots/</url>        </snapshotRepository>    </distributionManagement> </project>


里面对maven的scm配置进行了配置,还配置了发布到我的Maven仓库的信息。还有就是release插件。

配置好之后,我用小乌龟进行一下代码提交。

maven 的 scm支持还是挺好用的。有一些相关的命令,官方网站为:http://maven.apache.org/scm/maven-scm-plugin/

像之前的导入操作,我们可以通过

mvn scm:checkout 这们的命令进行。

有两个操作是为后面操作奠定基础的,是scm:tag跟scm:branch。我用这两个命令测试了一下。创建里程碑跟分支

mvn scm:tag -Dbasedir=E:/project/xzf_20130929/spike-svn-maven/tags -Dtag=first-tag.0.0.1

创建完成后,进入spike-svn-maven/tags/first-tag.0.0.1这个目录。来继续创建分支

mvn scm:branch -Dbasedir=E:/project/xzf_20130929/spike-svn-maven/branches -Dbranch=first-tag.0.0.1.branch.0.0.1

(这里tag 跟 branch的名字我是乱取的哈) 然后用小乌龟查看svn服务上的改工程的仓库图:

我们这样就根据主线版本库,创建了里程碑跟在里面碑上面创建分支修改了。

但是这样创建的里程碑跟分支若进行mvn:clean deploy上传在我们的maven仓库中,都是snapshot版本的。

使用release插件进行操作: 官网:http://maven.apache.org/maven-release/maven-release-plugin/examples/prepare-release.html

将刚才创建的first-tag.0.0.1跟first-tag.0.0.1.branch.0.0.1在svn版本库上删除。然后本地进行更新到最近版本。

然后将我上面之前的犯的一个小错误纠正。将trunk/spike-svn-maven里面的东西全部移动到trunk/目录下,然后删除spike-svn-maven这个目录进行一下提交代码。

我们的CMD命令行定位到工程目录 :E:/project/xzf_20130929/spike-svn-maven/trunk

mvn release:prepare

里面可以自定版本号之类的,简单起见我就一路回车去了。在显示 BUILD SUCCESS后,我们的工程目录下多了几个文件

观察pom.xml,会发现里面的version版本号按照上次的规则进行了变化。pom.xml.releaseBackup是备份文件。

如果在上次prepare操作,有修改或觉得不满意,可以执行 mvn release:rollback ,然后记得进扩target目录下面把 checkhout目录删除 (或执行mvn release:clean)

然后在版本库上把上面生成的tags文件删除,貌似这个要手工删除。

一切就绪 ok 之后 ,我们发布。

mvn release:perform

同样的BUILD SUCCESS后,我们的一次release 里程碑发布就OK了。这时我们看svn库上:

这时,我们trunk下的pom.xml里面的版本信息


<groupId>com.fengzidm.spike</groupId><artifactId>spike-svn-maven</artifactId><version>1.1-SNAPSHOT</version><packaging>jar</packaging>

已经变成了1.1-SNAPSHOT版本了。而tags/spike-svn-maven-1.0/pom.xml上的version为 1.0


在release:perform操作时,会上传release版本到我的maven仓库nexus服务中去。

如果我们对trunk/spike-svn-maven进行一下mvn clean deploy操作。登录到nexus服务器中:

release版本跟snapshot版本已经分布发布。

在里程碑版本创建分支进行开发:

我们在发布了里程碑版本,并放上线后,如果几个地方放了不同的版本。我现在要在原来1.0的release版本中发布中创建一个分支来进行修正。

使用release:branch命令创建。

命令行定位到tags/spike-svn-mave-1.0/目录 :

mvn release:branch -DbranchName=spike-svn-maven-1.0.1 -DupdateBranchVersions=true -DupdateWorkingCopyVersions=false

这样操作,maven会提示你要求给这次分支定义的版本,输入 1.0.1-SNAPSHOT,然后回车。然后就提示BUILD SUCCESS啦!

这里的svn上的目录结构:

分支版本创建好了。之于修改后发布。这些操作相似。如果要合并到主版本库去又是一个话题:^) , 这些我没经验就先不说啦。



最后,经过这一次spike实战后,对maven的这几个插件有了一定了解,也尝试解决了一些问题。总的来说收获不少。

对scm跟svn方面我的理解还比较浅的。如果有出现的明显的错误请见谅:^)。

广告 广告

评论区