新版《星球大战》的精髓就是反对克隆幸运的是我们要谈的不是像电影中那样致命的克隆但是这种克隆带来的伤害依然存在我们要谈的是围绕Apache Groups Xalan和Xerces的一系列问题 克隆 在我们的观点中克隆是指包和类问题是XML和Java好像在一个连续改变的状态中在说明书中建立的XML新特点必须在某处执行通常新特征和旧版本中的存在沖突尽管它不是很大的问题然而当你认识到这些矛盾执行被封装和配置在同一克隆文件名时你还是将能意识到问题的存在 克隆文件xalanjarxercesjarcrimsonjar给出了开发者和管理者要解决的问题但文件名不能显示他们属于哪个版本的任何信息 更多问题 问题是不仅存在这些文件的沖突执行而且JDK配置的版本也存在沖突JDK有一个指定目录(lib/ext)该目录自动存放着classpath中的一些jar文件该目录被用于缓解到基本java包的注册扩张因为该注册扩张被设计成JDK(或JRE)的一部分感觉上是直接到java虚拟机与而不是自动加入classpath 用JAVA解析XML已经变得那么平常以至于很多JDK中配置了Xalan 和Xerces jar文件更重要的事他们被配置在lib/ext目录下虽然这是一个好主意但他却更容易带来问题 在IBM的JDK的lib/ext目录下有一个旧的Xerces版本该版本不支持JAXP因此它与许多Xalan当前版本不兼容 Sun存在同样的问题他的JDK版本包含支持Crimson的JAXP但不幸的是JDK中配置的crimsonjar用了一个旧版的JAXP同样也与许多Xalan当前版本不兼容 解决途径 这还刚刚是问题表面当你开始考虑用政治或商业模块建立应用程序时问题更为严重假如你需要用java联合两个应用程序一个应用程序你是用了IBM旧版的xercesjar另一个你用的是Sun 旧版的crimsonjar而你的代码需要用最新版的Xerces 和Xalan 理想的解决方法是所有的供应商升级他们的版本重新配置他们的应用软件和模块然而这是不可能的 另一种选择是检查清楚每个应用程序使用的是那个jar文件的class如果条件允许你能安排classpath中的jar文件是他们按指定的次序装载你可能也会考虑在不同的java虚拟机上安装你的应用程序这样对每个应用程序你能容易的操作不同的classpath让你对每个应用程序使用需要的jar文件以分别操作 |