如题。
我知道可以替换JDK/JRE中的部分类或DLL,但是存在部署的问题。总不能每次部署都带着个自己的JRE吧。而且这也存在授权问题。

解决方案 »

  1.   

    你都要自己定制了,当然要带着环境到处跑啊
    可以想想有没有别的解决方案而不用修改公用api的,否则只能带着跑
      

  2.   

    jdk 有个ext 下面可以放一些包
    可以替换的
    另外 重定义classloader 貌似也可以实现
      

  3.   

    这和我说的是一样有部署的问题,至于重定义classloader如何做,才能达到这个目的呢?还有什么其他方法吗?
      

  4.   

    我想你可以这样做
    你既然要替换类,那么你就要先找的你自己定义的类,后找到jre的包,哪这个只能有classloader 来做,简单的不需要. 比如你拷贝下String 的源码自己定义一个类java.lang.String,会先找这个类的.
    dll 这个不好说,不过貌似也是可以的.
      

  5.   


    能不能自定义启动环境,即另写一个 bat 文件来启动你的应用程序,然后再这个文件中设置 classpath, 指你自己的相关的库文件
      

  6.   

    其实你既然已经替换掉jdk或者jre中的dll,那就不存在通用性了,每次部署你都必须带着自己的jre,这是肯定的。
    就算不带自己的jre,那你也要带着那些替换的内容,其实还没有直接带着自己的jre方便了。
    还有,不要随随便便更换掉java核心包中的内容,否则这样的代码特性就只能运用于你自己的jre中了,而且启动类加载器不能加载java.包下面自定义的任何类,不过你可以自己实现自定义的ClassLoader。
      

  7.   

    谢谢大家的建议。
    但是有时确实需要概念JDK本身的实现,比如有些是JDK本身的BUG,因此也就别无选择了。但是修改或替换JRE的组件对部署有很大影响,因此不是一个很好的解决方案。
    请大家集思广益,看看有什么更好的方法。
    主要目标是:
    1、修改JDK本身的部分API的实现(不多,很多是在基础上修改或改进),有些是核心包,有些是非公开的。
    2、修改JDK的一些DLL的实现。
      

  8.   

    1、根本没有必要修改jdk本身的实现,如果你觉得jdk自带api实现不好,完全可以自己实现,例如对zip的处理,java api就实现得不好,对中文处理只能用utf-8格式。但是不等于替换掉java的api。
    2、dll实现。你也可以自己用jni实现,例如磁盘读写等等,但是实现似乎也没有必要非要替换掉jdk下的那些dll,完全可以放在自己的程序目录下。
    如果你觉得sun的jdk本身有很多你无法接受,或者影响到你系统实现,且无法用自己的代码来解决的bug,例如java在内存处理上的问题,或者虚拟机在某些环境下无法正常运行,你可以将环境描述以及bug描述发到sun官方,如果你迫切急需改掉虚拟机固有bug,在短时间内是无法完成的,因为需要自己开发java虚拟机。但是这些是属于java虚拟机的bug和不适应性,如果仅仅是api调用的功能缺陷,你完全可以自己去实现的,但是绝对不要替换掉jdk下的东西。