公司介绍 产品展示 业务支持 解决方案 文档资料
网站导航 访客留言 技术论坛
     
     
  产品资料
  业界动态
  JAVA技术


首  页 > 文档资料 > 产品资料  
 
  如何应对开发包升级?

在Java开发中,我们会使用到许多第三方的开发包,方便我们的开发,但是我们又不得不面对这些开发包的升级,升级的目的有两种:1 bug和性能方面的考虑;2 新特性,但是升级还需要考虑的重要问题就是兼容既有代码,如果升级开发包后导致你的程序无法运行,那么确实是一件非常烦人的事情。Java开发包升级通常会涉及到以下改动:

  1. 命名空间名称改变:增加名称层次、更改名称等,如Hibernate 2到Hibernate 3就更改了包名,由net.sf.hibernate转换为org.hibernate,类似的情况比较多。
  2. 接口、类、函数方法、属性名称的重命名:由于以前的名称不合理或无法表达其准确意思,所有需要进行重命名操作,这个也非常普遍。
  3. Deprecated:过时的类、方法和属性:这个在Java中也使用非常多,我们将这些类、方法等标识为过时(以后的版本中可能要去除),不再提倡用户调用,而更换为新的调用方式。
    以上的三个方面是在软件包升级时经常遇到的,在升级开发时也主要是解决这三方面的问题。下面就向大家介绍一下如何在IDEA下快速完成开发包的升级。

在IDEA下需要使用两种方法完成上述的问题:Migrate和Structure Search,Migrate主要是进行类型迁移操作,1和2遇到的问题可以快速被解决。如Hibernate 2到Hibernate 3的升级中,包名的改变是关键,所以我们只需利用Migrate将net.sf.hibernate迁移到org.hibernate即可,这个在Migrate中只需一步就可以完成迁移,Migrate同样适用于接口和类的重命名,如将旧的接口或类的名称可以快速转换到新的名称。

对于方法和属性的重命名及Deprecated,我们则需要使用Structure Replace。通常我们有两种形式替换:普通文本及正则表达式,这也是许多IDE工具都包含的,而Structure Repalce则是基于Java代码的替换,也就是它能理解Java代码的含义,找到匹配的结果,这个也正是我们需要的:依据代码含义进行替换。让我们看一个例子:

java.awt.List类的addItem(String item)方法在jdk 1.1以后标识为过时方法,我们希望能够以新的方法add(String item)来代替过时方法,在通常的情况下,我们可以通过文本编辑软件进行替换,只需将addItem替换为add,但是这个替换太武断啦,addItem是一个很普通的方法名,你的自定义接口或类中可能也包含这个方法名,这个替换非常危险。下面让我们看看在IDEA如何进行这样的替换操作,达到最精确最准确地替换。

在Structure Replace对话框中,在“Search Template”栏输入$list$.addItem($variable$),这里不要以“;”结尾,“;”结尾表示java语句,不包含“;”表示为Java表达式,这里我们是表达式替换。在“Replace Template”栏输入$list$.add($variable$),然后我们点击“Edit Variables”按钮,在Edit Variables对话框将list变量的“Text/regular expression for java expression type”属性值设为“java.awt.List”,表示list变量的类型为java.awt.List,如果勾选“Apply constraint within type hierarchy”则表示List的子类也可以被替换。所有设定完毕后,我们点击“Find”按钮,如果查询到结果,在查询工具栏点击“Refactor”按钮,就可以完成替换。

使用Structure Replace可以完成各种过时方法、属性的快速替换,操作非常简单。IDEA的Structure Research完全是基于Java语法的,完全能够够理解Java语句背后的欲表达的意思,与普通的文本和正则表达式查找,Structure Research在Java替换方面更智能,更了解查询文本背后的java意思表达。

在升级过程中,我们只需利用好Migrate和Structure Replace,我们可以很快完成升级过程中需要完成的任务,而且非常准确。相信通过IDEA下的这两个特性,那些伴随升级的“Cannot find symbol…”、“Warnning:[Deprecation]….”错误都不会存在,只需查看一下changeLog,利用Migrate和Structure Replace,一切升级操作就可以瞬间完成。

总结:软件开发是过程开发,在此过程中不断有新的功能添加,旧的功能放弃,bug的修复,结构的调整优化等等,这个过程不可避免的会涉及到对代码的更改,只要我们掌握好重构等方法我们可以做到对自己代码的调整,如果要适应他人做的代码调整,Migrate,Structure Replace将是非常好的解决方法。