2011年5月25日星期三

  更新测试标签的时候,classes文件夹下新增Java源码问题的解决

问题:

测试过程中,需要测试人员基于标签进行测试包的发布。

就现阶段来说,有相当一部分的系统是使用Myeclise打war包,但有个棘手的问题的是,在打包的过程中,经常出现这个问题:第一次自动编译代码的时候,war包一切正常;一旦开发人员更新了源码,需要测试人员更新程序war包,对本地程序标签进行更新,会出现如下图一样的Restored(还原)操作。

image

image

这样会将源代码更新到WebRoot\WEB-INF\classes,然后再次打war包的时候,会将源码打进去,因为最后发布war包的时候,是没有源码文件的,因此如果放置不管,会造成测试与发布的程序的不一致(虽然最后影响很小)。

原有解决方式:每次更新前,将classes文件删除,然后再次进行更新,就不会出现上述Restored现象。

弊端:每次更新前都需要进行如下操作:

删除classes文件—>SVN Update—>在Myeclipse下进行Project的Clean操作-->重新进行编译打包

该解决方式仅仅是一个无奈之举。

 

对问题进行分析:

第一次进行更新的时候,并未出现Restored(还原)java源码,而编译过一次之后,再次更新会出现该现象,因此可能和编译有关。

检查svn的entries文件(条目文件)

正常的entries文件如下:

dir
32022
svn://192.168.15.58:7777/repos6/projects/GM/tag/r_GM_v3.0.0_CangQ_20110525/WebRoot/WEB-INF/classes
svn://192.168.15.58:7777/repos6

编译过之后的entries文件如下:

dir
31990
svn://192.168.15.58:7777/repos6/projects/GM/tag/r_GM_v3.0.0_CangQ_20110525/src
svn://192.168.15.58:7777/repos6

可以看到,经过编译之后,相关的entries文件进行了改变

查看src下的svn相关的entries

dir
31990
svn://192.168.15.58:7777/repos6/projects/GM/tag/r_GM_v3.0.0_CangQ_20110525/src
svn://192.168.15.58:7777/repos6

可以看出,和编译后的classes目录的entries一致,是这个原因导致的编译后,如果更新的话,会将java源文件还原到classes目录。

发生原因:具体原因没有深究,个人认为是编译的时候,遇到了非java文件,就不编译直接扔到了classes目录,将原有的svn的entries文件覆盖,异或是其他的原因,如果有Java高手知道的请告知。

一劳永逸的解决方式:

在项目的属性一栏中,进行如下的配置

image

也就是在编译的时候,排除src源码目录的svn相关信息

前后操作对比:

先将classes目录删除,然后svn更新。

进行编译。

查看classes目录的entries条目文件:

10

dir
32023
svn://192.168.15.58:7777/repos6/projects/GM/tag/r_GM_v3.0.0_CangQ_20110525/WebRoot/WEB-INF/classes
svn://192.168.15.58:7777/repos6

和原来保持一致。

然后进行更新:

image

未有java源码文件的Restored出现。OK,问题解决。

 

该配置是否能随功能进行保存?实验如下:

1.在SVN中Export一份程序代码(不含svn信息)

2.复制一份出来,然后用Myeclipse打开第一个项目,进行上述配置,然后保存项目,和原来复制的那个项目进行对比。

3.发现Myeclipse的一个配置文件.classpath的开头部分,发生了变动,可以看出,该配置是可以保存的。

image

并且,由此可以看出,可以不进入MyeclipseIDE编译器,直接修改该文件,添加上述语句,既可解决上述问题。

没有评论:

发表评论