项目Git+Maven化总结
公司原Java项目历史悠长,使用的版本管理为Svn,且尚未Maven化。为了后续提高开发效率,及持续集成,就和同事一起负责把项目进行Git+Maven化(个人负责Maven化)。期间也涉及到Java代码由GBK转UTF-8的过程(原项目混合GBK和UTF-8),统一了项目的编码。
实施过程如下(含Svn转Git):
一. Svn转Git管理
- 进入xxx项目根路径,删除隐藏文件.svn
rm -rf .svn - git初始化管理
git init - 在gitLib中创建远程仓库
项目创建.gitignore文件,描述git管理忽略的文件
12345.idea/.project*.imltarget/.settings/本地git项目关联远程仓库,至此Svn转Git结束
git remote add origin https://xxx.gitlab.com/java/xxx.git git add . git commit -m "项目初始化" git push -u origin master
二.Maven化(请保证外网与局域网的网络良好)
- 在项目根路径下创建pom.xml文件,用于添加项目依赖的jar
在pom.xml中逐一添加jar引用:
(a).在中央仓库:http://mvnrepository.com/ 或阿里Maven私服:http://maven.aliyun.com/nexus/ 根据jar名称搜索获得具体maven坐标,并拷贝到pom.xml中。如存不同组织相同名称的jar。可以使用以下命令查看jar内容,根据类路径进一步判断:
jar -tf xxx.jar
(b).如果项目引用的jar在中央仓库中未找到,需要把该jar手动上传到Nexus私服,然后再添加到pom.xml中。
- 把现在WEB-INF下的lib目录移除到项目外
- 检查现在项目结构是否为标准Maven项目目录结构,如果不是创建目录,然后移动原目录或文件;
- 现在的项目进行构建,看是否能够编译成功:如编译失败可能jar依赖有遗留,添加后,反复执行,直至成功编译
- 检查项目中jar包是否存在版本依赖冲突,如存在使用exclusion进行排除冲突:
mvn dependency:tree -Dverbose | grep “omitted for conflict with” - 查看target中生成编译后的lib目录与项目外的lib是否相同,肉眼核实一遍,然后删除项目外的lib。
启动项目,随机验证项目功能是否可以正常使用,Maven化至此也完成:
(a).项目首先使用的jetty尝试运行,发现jetty运行报web.xml中使用servlet的找不到,经检查确实不存在,而原来tomcat运行正常,可见tomcat对类的启动过程没有校验是否存在(具体机制后续学习);
(b).jetty启动后,发现布局乱掉,具体原因尚未找到。后转maven的tomcat插件运行,正常使用(经Fiddler抓包发现,有收到js,但在浏览器中查看为空—现未解决,留在在后面有时间处理)。
三. Java代码由GBK->UTF-8
文件编码识别推荐以下两款开源软件(不保证百分百正确,需自己核实结果的正确性):
(a).juniversalchardet:https://github.com/thkoch2001/juniversalchardet
(b).jchardet:http://jchardet.sourceforge.net/
以上识别的结果,再结合IDEA文件显示的编码进行验证确认。
四. 项目提测与团队推广
- 项目代码申请全面回归测试
团队内推广Git+Maven+IDEA使用(见上篇Dubbo+Cat分布式服务搭建中可找到相关学习资料)。团队推广是发现各种奇葩问题:
(a).推荐项目Maven在IDEA中的配置,使用maven安装路径conf的setting.xml,及当前用户下.m2本地库—部分同学工具编译与命令编译环境一致,避免不必要的麻烦
(b).Windows安装JDK与Jre的安装比较独立,请格外注意,保证两者都要安装,Mac不需要关心Jre的问题
(c).Window默认编码为GBK,Mac为UTF-8,而我们项目为UTF-8,如果在pom.xml中未指定编码可能某些类会在Windows编译不通过,Mac正常。—推荐设定编码
(d).有的是IDEA问题:旧版本的IDEA可能需要额外配置参数(如Maven编码),新版本可以直接使用—推荐使用最新版本;
(e).曾遇到某个类找不到竟然是jar冲突导致—推荐检查项目中jar包是否存在版本依赖冲突(如二.6所述,这一条是补加的)
(f).Maven使用中总是报某个类找不到,后重装Maven竟然好了(太神奇了)
(g).现公司网路实在太差了,有时在Maven编译时,总是下不到依赖的jar,只能手动一个个下载上传到本地私服。—强烈建议有个好的网络,珍惜生命- 发现团队内用到的工具统一版本,很有必要,否则可能在我的机器正常,在你的机器上就运行不起来,现在约定了以下开发工具的使用版本:
JDK:1.7.0_79(想推荐Java8,考虑到影响范围广,暂不升级) IDEA:>=2016.2(发现最新的2016.3社区版,使用中又有点小惊喜) Git:>= 2.3.8 Maven:3.3.9
参:
- 中央仓库Web访问:http://mvnrepository.com/
- 阿里Maven私服Web访问:http://maven.aliyun.com/nexus/
- MavenFilteringException找不到:https://my.oschina.net/u/584441/blog/793356
- Maven:Perhaps you are running on a JRE rather than a JDK:https://my.oschina.net/u/584441/blog/794562