在Maven的网站有关于如何使用Jazz scm plugin来实现自动release的文章(Jazz Release),我这里不做啰嗦,主要说一下,按照这个使用后遇到的问题以及如何解决的。
- 文件结构问题,在我们的系统设计之初,在RTC中创建了3个components,3个maven project来独立构建3个ear,后来为了一次性构建3个ear,建立了第四个component (build)专门存储pom.xml和settings.xml。结构如下:
component1
project1
component2
project 2
component3
project 3
component4
build project
pom.xml, settings.xml
所以在改进之后我们的maven命令都是在bui ld 目录下进行的。这个时候我们在build项目中的pom.xml加入了如下配置:
<scm> <connection>scm:jazz:https://rtc:9444/jazz:GPDBBuildWorkspace</connection>
</scm>
结果在从执行mvn release:prepare的时候,发现tag scm之后,pom.xml里面的connection变成了
<scm> <connection>scm:jazz:https://rtc:9444/jazz:GPDBBuildWorkspace/jazz:tag-version</connection>
</scm>
这个在标准maven project中没有出现过,标准scm tag之后会变回之前配置的额workspace。这个问题的细节我没有研究,看到官方文档这句之后:It is very strongly recommended that a separate repository workspace, containing just one component, the component to be released, be set up for exactly this purpose. 把项目在rtc的结构重构解决问题。解决之后的文件结构
component5
project1
project 2
project 3
pom.xml
settings.xml
- 没有自动Push,这个问题只发生在我本地的机器上,觉得非常奇怪。查看了scm plugin的代码,发现是系统platform encoding不同导致的,Push之前会读取现在的baseline和workspace信息比较,用的是简单的string parse,没有考虑utf问题,所以只有最后通过修改scm.ini解决。
-Duser.language=us -Dfile.encoding="UTF-8"
- Push遇到changset should be associate with artifact id,这个问题可以参考scm775和MRELEASE-909,本以为这个问题已经解决了,可惜Chris提交的代码错过了scm相关的release,现在也没有看到Chris release的迹象,没办法只能把相关的Git代码弄到本地,创建自己的Local版本,将release plugin和scm plugin放到本地repo中。
release plugin 版本定制:
a. 在release plugin的git版本中下载当前版本zip包
b. 将Chris改的release相关代码合并到zip包版本中
c. 用mvn:install -DskipTests=true在target文件夹中获取对应的release包
scm plugin版本定制:
a.在scm plugin的git版本中下载1.9.4版本zip包
b.将Chris改动的代码合并到zip包版本中
c. 用mvn:install -DskipTests=true在target文件夹中获取对应的release包
在settings.xml创建自己的local plugin repo,把scm plugin和release plugin的定制版放到项目source control下,把local plugin repo指向定制版scm和release plugin,搞定。