跳至内容
wiki
用户工具
登录
站点工具
工具
显示页面
修订记录
反向链接
最近更改
媒体管理器
网站地图
登录
最近更改
媒体管理器
网站地图
您的足迹:
分享:技术:maven:maven_scm_release_plugin
本页面只读。您可以查看源文件,但不能更改它。如果您觉得这是系统错误,请联系管理员。
====== maven-scm-plugin插件和maven-release-plugin插件的介绍 ====== ===== 背景 ===== 项目SNAPSHOT快照版本开发到一个阶段后,需要发布一个release稳定版本。一次正式的发布需要这样一些工作: - 在trunk中,更新pom版本从0.0.1-SNAPSHOT到0.0.1 - 对0.0.1打一个svn tag - 针对tag进行mvn deploy,发布稳定版本 - 更新trunk从0.0.1到0.0.2-SNAPSHOT 当然0.0.1后面紧跟的不一定是0.0.2,规范的maven版本应该是:<主版本>.<次版本>.<增量版本> * 主版本一般来说代表了项目的重大的架构变更 * 次版本一般代表了一些功能的增加或变化,但没有架构的变化 * 增量版本,一般是一些小的bug fix,不会有重大的功能变化 所以0.0.1后面可能是0.1.1也可能是1.0.1,不一定是0.0.2 接着上面继续讲,每次正式的发布你都可以手工一步步的做这些事情,无非就是一些svn操作,一些pom编辑,还有一些mvn操作。但是重复手工做这些事情,一来繁琐,而来容易出错。因此maven-scm-plugin插件和maven-release-plugin插件就是用来自动化这一系列动作。 ===== 操作 ===== ==== pom.xml源码 ==== 注意其中的: * scm软件配置管理 * nexus私服仓库 * scm软件配置管理插件 * 版本发布插件 * 版本发布管理 <code xml pom.xml> <?xml version="1.0" encoding="UTF-8"?> <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>com.gxx</groupId> <artifactId>record</artifactId> <packaging>war</packaging> <version>0.0.1-SNAPSHOT</version> <name>record Maven Webapp</name> <url>http://maven.apache.org</url> <!-- 项目属性 --> <properties> <!-- jar 版本设置 --> <spring.version>4.0.5.RELEASE</spring.version> <aspectjrt.version>1.6.9</aspectjrt.version> <aspectjweaver.version>1.6.1</aspectjweaver.version> <freemarker.version>2.3.20</freemarker.version> <mybatis.version>3.2.7</mybatis.version> <mybatis-spring.version>1.2.2</mybatis-spring.version> <mybatis-generator-core.version>1.3.2</mybatis-generator-core.version> <servlet-api.version>2.4</servlet-api.version> <jsp-api.version>2.0</jsp-api.version> <jstl.version>1.2</jstl.version> <standard.version>1.1.2</standard.version> <jackson-databind.version>2.4.0</jackson-databind.version> <jackson-annotations.version>2.4.0</jackson-annotations.version> <jackson-module-jaxb-annotations.version>2.4.0</jackson-module-jaxb-annotations.version> <jackson-core.version>2.4.0</jackson-core.version> <junit.version>4.11</junit.version> <log4j.version>1.2.16</log4j.version> <mysql-connector-java.version>5.1.9</mysql-connector-java.version> <commons-dbcp.version>1.4</commons-dbcp.version> </properties> <!-- scm软件配置管理 --> <scm> <connection>scm:svn:svn://121.43.104.34/gxx/trunk/record</connection> <developerConnection>scm:svn:svn://121.43.104.34/gxx/trunk/record</developerConnection> </scm> <dependencies> <!-- Spring --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-core</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-beans</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context-support</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-aop</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-jdbc</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-web</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>${spring.version}</version> </dependency> <!-- aspectj --> <dependency> <groupId>org.aspectj</groupId> <artifactId>aspectjrt</artifactId> <version>${aspectjrt.version}</version> </dependency> <dependency> <groupId>org.aspectj</groupId> <artifactId>aspectjweaver</artifactId> <version>${aspectjweaver.version}</version> </dependency> <!-- freemarker --> <dependency> <groupId>org.freemarker</groupId> <artifactId>freemarker</artifactId> <version>${freemarker.version}</version> </dependency> <!-- mybatis --> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>${mybatis.version}</version> </dependency> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis-spring</artifactId> <version>${mybatis-spring.version}</version> </dependency> <dependency> <groupId>org.mybatis.generator</groupId> <artifactId>mybatis-generator-core</artifactId> <version>${mybatis-generator-core.version}</version> </dependency> <!-- j2ee基础 --> <dependency> <groupId>javax.servlet</groupId> <artifactId>servlet-api</artifactId> <version>${servlet-api.version}</version> <scope>provided</scope> </dependency> <dependency> <groupId>javax.servlet.jsp</groupId> <artifactId>jsp-api</artifactId> <version>${jsp-api.version}</version> <scope>provided</scope> </dependency> <dependency> <groupId>javax.servlet</groupId> <artifactId>jstl</artifactId> <version>${jstl.version}</version> </dependency> <dependency> <groupId>taglibs</groupId> <artifactId>standard</artifactId> <version>${standard.version}</version> </dependency> <!-- jackson --> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>${jackson-databind.version}</version> </dependency> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-annotations</artifactId> <version>${jackson-annotations.version}</version> </dependency> <dependency> <groupId>com.fasterxml.jackson.module</groupId> <artifactId>jackson-module-jaxb-annotations</artifactId> <version>${jackson-module-jaxb-annotations.version}</version> </dependency> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-core</artifactId> <version>${jackson-core.version}</version> </dependency> <!-- log4j --> <dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>${log4j.version}</version> </dependency> <!-- junit --> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <scope>test</scope> <version>${junit.version}</version> </dependency> <!-- mysql --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>${mysql-connector-java.version}</version> </dependency> <!-- dbcp --> <dependency> <groupId>commons-dbcp</groupId> <artifactId>commons-dbcp</artifactId> <version>${commons-dbcp.version}</version> </dependency> </dependencies> <!-- 设定除中央仓repo1.maven.org/maven2/)外的其他仓库,按设定顺序进行查 --> <repositories> <!-- nexus私服仓库 --> <repository> <id>nexus</id> <name>Team Nexus Repository</name> <url>http://121.43.104.34:8081/nexus/content/groups/public</url> </repository> <repository> <id>offical</id> <name>Maven Official Repository</name> <url>http://repo1.maven.org/maven2</url> <snapshots> <enabled>false</enabled> </snapshots> </repository> <repository> <id>spring-milestone</id> <name>Spring Maven MILESTONE Repository</name> <url>http://maven.springframework.org/milestone</url> </repository> <repository> <id>jboss</id> <name>Jboss Repository</name> <url>http://repository.jboss.org/nexus/content/groups/public-jboss/</url> <snapshots> <enabled>false</enabled> </snapshots> </repository> <repository> <id>java.net</id> <name>Java.net Repository</name> <url>http://download.java.net/maven/2/</url> <snapshots> <enabled>false</enabled> </snapshots> </repository> <repository> <id>spring-release</id> <name>Spring Maven Release Repository</name> <url>http://repo.springsource.org/libs-release</url> <snapshots> <enabled>false</enabled> </snapshots> </repository> </repositories> <build> <finalName>record</finalName> <plugins> <!-- jdk编译插件 --> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>2.0.2</version> <configuration> <source>1.6</source> <target>1.6</target> <encoding>utf8</encoding> </configuration> </plugin> <!-- scm软件配置管理插件 --> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-scm-plugin</artifactId> <version>1.3</version> </plugin> <!-- 版本发布插件 --> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-release-plugin</artifactId> <version>2.4</version> <configuration> <tagBase>svn://121.43.104.34/gxx/tags/record</tagBase> <branchBase>svn://121.43.104.34/gxx/branches/record</branchBase> </configuration> </plugin> <!-- 原型插件 --> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-archetype-plugin</artifactId> <version>2.2</version> </plugin> </plugins> </build> <!-- 版本发布管理 --> <distributionManagement> <!-- release稳定版本 --> <repository> <id>nexus-releases</id> <name>Nexus Release Repository</name> <url>http://121.43.104.34:8081/nexus/content/repositories/releases/</url> </repository> <!-- snapshots快照版本 --> <snapshotRepository> <id>nexus-snapshots</id> <name>Nexus Snapshot Repository</name> <url>http://121.43.104.34:8081/nexus/content/repositories/snapshots/</url> </snapshotRepository> </distributionManagement> </project> </code> ==== 操作步骤 ==== <file> D:\05.HeadWorkspace\record>mvn release:prepare #进入项目目录,dir会看到pom.xml,当前版本是0.0.1-SNAPSHOT,执行脚本 ############################################################################### [INFO] Scanning for projects... [INFO] [INFO] ------------------------------------------------------------------------ [INFO] Building record Maven Webapp 0.0.1-SNAPSHOT [INFO] ------------------------------------------------------------------------ [INFO] [INFO] --- maven-release-plugin:2.4:prepare (default-cli) @ record --- [INFO] Resuming release from phase 'scm-check-modifications' [INFO] Verifying that there are no local modifications... [INFO] ignoring changes on: **\release.properties, **\pom.xml.next, **\pom.xml .releaseBackup, **\pom.xml.backup, **\pom.xml.branch, **\pom.xml.tag [INFO] Executing: cmd.exe /X /C "svn --non-interactive status" [INFO] Working directory: D:\05.HeadWorkspace\record [INFO] Checking dependencies and plugins for snapshots ... What is the release version for "record Maven Webapp"? (com.gxx:record) 0.0.1: : ############################################################################### ->输入回车,以0.0.1为发布版本,也可以输入新的版本 ############################################################################### What is SCM release tag or label for "record Maven Webapp"? (com.gxx:record) rec ord-0.0.1: : ############################################################################### ->输入回车,以record-0.0.1为tag标签名称,也可以输入新的标签 ############################################################################### What is the new development version for "record Maven Webapp"? (com.gxx:record) 0.0.2-SNAPSHOT: : ############################################################################### ->输入回车,以0.0.2-SNAPSHOT为新的开发版本,也可以输入新的版本 ############################################################################### ... [INFO] Release preparation complete. [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESS [INFO] ------------------------------------------------------------------------ [INFO] Total time: 32.574s [INFO] Finished at: Mon Jul 06 16:03:00 CST 2015 [INFO] Final Memory: 4M/8M [INFO] ------------------------------------------------------------------------ ############################################################################### #这个时候在svn://121.43.104.34/gxx/tags/record下可以看到名字为record-0.0.1的tag #pom.xml从0.0.1-SNAPSHOT变成0.0.2-SNAPSHOT,并提交svn #record文件夹下会出现俩文件:pom.xml.releaseBackup和release.properties D:\05.HeadWorkspace\record>mvn release:perform #再执行脚本 #maven-release-plugin会自动帮我们检出刚才打的tag,然后打包,分发到nexus私有仓库中 </file> ==== 结束检查 ==== 查看pom.xml {{ :分享:技术:maven:maven插件截图3.png?300 |}} 查看svn {{ :分享:技术:maven:maven插件截图1.png?200 |}} 查看nexus {{ :分享:技术:maven:maven插件截图2.png?300 |}} ==== 错误记录 ==== 在这个过程中我报过一些错误,这里都记录了下来,如果有相同的错误信息出现,可以参考后面跟的解决方案 <file> 报错: [ERROR] Command output: [ERROR] 'svn' 不是内部或外部命令,也不是可运行的程序 [ERROR] 或批处理文件。 解决方法: windows安装svn的时候默认是不安装 svn command line这个东西的,重新打开svn的安装exe,选择modify,将“command line client tools”允许安装,然后next继续安装(注意版本一致性)。 http://blog.csdn.net/mitea90/article/details/19075673 </file> <file> 报错: [ERROR] Command output: [ERROR] svn: E155007: 'D:\05.HeadWorkspace\record\pom.xml' is not a working copy 解决方法: 项目必须是从svn仓库co出来的 </file> <file> 报错: [ERROR] svn: E155036: Please see the 'svn upgrade' command [ERROR] svn: E155036: The working copy at 'D:\05.HeadWorkspace\record' [ERROR] is too old (format 29) to work with client version '1.8.10 (r1615264)' ( expects format 31). You need to upgrade the working copy first. 解决方法: 对本地文件夹进行一次upgrade操作,在项目文件夹上右键,svn upgrade </file> <file> 报错: [ERROR] Failed to execute goal org.apache.maven.plugins:maven-release-plugin:2.4 :prepare (default-cli) on project record: Cannot prepare the release because you have local modifications : [ERROR] [pom.xml:modified] [ERROR] [src\main\java\com\gxx\record\web\user\UserController.java:modified] [ERROR] [src\main\webapp\WEB-INF\ftl\user\preRegist.ftl:deleted] [ERROR] [src\main\webapp\WEB-INF\ftl\user\preRegistFtl.ftl:added] 解决方法: 由于要发布release版本,前提一定要代码先提交完,所以要先提交代码 </file> <file> 报错: [ERROR] The svn tag command failed. [ERROR] Command output: [ERROR] svn: E160013: File not found: transaction '6-6', path '/tags/record/reco rd-0.0.1' 解决方法: trunk,tags,branches需要import导入初始化资源,客户端才能读取和提交内容到该目录下 </file>
分享/技术/maven/maven_scm_release_plugin.txt
· 最后更改: 2015/07/07 15:51 由
gxx
页面工具
显示页面
修订记录
反向链接
回到顶部