我最近在移植一个前几年编写的大约数十万行规模的一个java se工程,目的平台为jdk1.6,遇到了一个棘手的问题,原工程中大量使用了com.sun打头的那些包下面的类(以下简称 特殊类),目前很多在1.6中已经找不到了,也没有对等的实现。我又不想把这几十万行程序再梳理一遍(没文档,又几乎没注释,梳理的话估计几个星期都搞不定),于是我产生了一个想法,各位帮我看看行不行:找到原jdk版本下的那些“特殊类”的源码,换个包名,我再重新打成jar包,供现在的程序在1.6下加载。这方面我没试过,不知道这样行不行(找源码也是个难事,但好歹去sun应该能扒到吧?!)?我最担心的是这些特殊类没准会调用系统的底层,这样就不是重新打包的问题了!高手们回答下啊!

解决方案 »

  1.   

    使用 com.sun 本身就不是好的设计,因为那些是内部使用的类,跟实现绑定在一起的,换厂商和换版本都会有问题。开源之后并不是立即把所有的源码都开源了,有些实现的内部版本也不开源的,所以改包名的话,可能有些类还是找不到源码,不知道 java 开源之后是指新的版本将是开源的还是连老的版本也拿出来公开源码,我觉得老的版本可能只是给你看部分源码,它和新的版本不同,新版本可能是直接基于开源的方法来开发的,不会去使用到专利相关的东西。
      

  2.   

    jdk安装路径的lib目录下有个tools.jar 里面还有一些com.sun开头的包 你找找有没有需要的类
      

  3.   

    你自己找找看有没有你需要的http://packages.ubuntu.com/zh-cn/dapper/amd64/sun-java5-jdk
      

  4.   


    还有:rt.jar  jsse.jar sunjce_provider.jar  这些包里面都有com.sun打头的你找找。
      

  5.   

    com.sun 及 sun 开头的包属于底层类库,每个平台下的 JRE 并不一定都是一样的,没有跨平台的特性,因此尽量不要使用这些包中的类。Ref: http://java.sun.com/products/jdk/faq/faq-sun-packages.html 
      

  6.   

    JDK源码官网上有的。。去下载吧
      

  7.   


    sunjce_provider.jar, jsse.jar 是由于 Sun 作为 JSSE、JCE 的一个 provider 而存在的,JSSE、JCE 采用了 Service Provider 机制由 java, javax 包定义规范,由 provider 去实现,使用时并不需要 import 进 provider 的类库,这在 J2EE 环境中是很常见的,不过就目前的 J2SE 环境这种情形也明显地在增加。
      

  8.   

    谢谢各位捧场,1楼说得的确也是个问题,找源码本身也是很繁重的一件工作,我最终放弃了这个方案。好在现在希望增加的功能并不复杂,我把这些功能用当年的jdk实现了。先忽悠过去再说吧:)
    结贴给分!