如何替换JDK本身的部分API?如非公开类以及JRE本身的部分DLL

dawn023 2009-05-20 04:17:06
如题。
我知道可以替换JDK/JRE中的部分类或DLL,但是存在部署的问题。总不能每次部署都带着个自己的JRE吧。而且这也存在授权问题。
...全文
208 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
树成 2009-05-22
  • 打赏
  • 举报
回复
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下的东西。
dawn023 2009-05-22
  • 打赏
  • 举报
回复
谢谢大家的建议。
但是有时确实需要概念JDK本身的实现,比如有些是JDK本身的BUG,因此也就别无选择了。但是修改或替换JRE的组件对部署有很大影响,因此不是一个很好的解决方案。
请大家集思广益,看看有什么更好的方法。
主要目标是:
1、修改JDK本身的部分API的实现(不多,很多是在基础上修改或改进),有些是核心包,有些是非公开的。
2、修改JDK的一些DLL的实现。
laorer 2009-05-21
  • 打赏
  • 举报
回复

能不能自定义启动环境,即另写一个 bat 文件来启动你的应用程序,然后再这个文件中设置 classpath, 指你自己的相关的库文件
树成 2009-05-21
  • 打赏
  • 举报
回复
其实你既然已经替换掉jdk或者jre中的dll,那就不存在通用性了,每次部署你都必须带着自己的jre,这是肯定的。
就算不带自己的jre,那你也要带着那些替换的内容,其实还没有直接带着自己的jre方便了。
还有,不要随随便便更换掉java核心包中的内容,否则这样的代码特性就只能运用于你自己的jre中了,而且启动类加载器不能加载java.包下面自定义的任何类,不过你可以自己实现自定义的ClassLoader。
xlongbuilder 2009-05-21
  • 打赏
  • 举报
回复
我想你可以这样做
你既然要替换类,那么你就要先找的你自己定义的类,后找到jre的包,哪这个只能有classloader 来做,简单的不需要. 比如你拷贝下String 的源码自己定义一个类java.lang.String,会先找这个类的.
dll 这个不好说,不过貌似也是可以的.
dawn023 2009-05-21
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 xlongbuilder 的回复:]
jdk 有个ext 下面可以放一些包
可以替换的
另外 重定义classloader 貌似也可以实现
[/Quote]
这和我说的是一样有部署的问题,至于重定义classloader如何做,才能达到这个目的呢?

还有什么其他方法吗?
xlongbuilder 2009-05-20
  • 打赏
  • 举报
回复
jdk 有个ext 下面可以放一些包
可以替换的
另外 重定义classloader 貌似也可以实现
yanhan0615 2009-05-20
  • 打赏
  • 举报
回复
你都要自己定制了,当然要带着环境到处跑啊。。。
可以想想有没有别的解决方案而不用修改公用api的,否则只能带着跑
marcblue 2009-05-20
  • 打赏
  • 举报
回复
学习~
Windouws 64 位Tomcat7.0.40 + 64位jdk1.7.0u21 绿色版 part1 纯绿色,官方下载,绝对可用~ 欢迎评论吐槽~ 文件 PATH 列表 │ LICENSE │ NOTICE │ RELEASE-NOTES │ RUNNING.txt │ ├─bin │ bootstrap.jar │ catalina-tasks.xml │ catalina.bat │ catalina.sh │ commons-daemon-native.tar.gz │ commons-daemon.jar │ configtest.bat │ configtest.sh │ cpappend.bat │ daemon.sh │ digest.bat │ digest.sh │ service.bat │ setclasspath.bat │ setclasspath.sh │ shutdown.bat │ shutdown.sh │ startup.bat │ startup.sh │ tcnative-1.dll │ tomcat-juli.jar │ tomcat-native.tar.gz │ tomcat7.exe │ tomcat7w.exe │ tool-wrapper.bat │ tool-wrapper.sh │ version.bat │ version.sh │ ├─conf │ │ catalina.policy │ │ catalina.properties │ │ context.xml │ │ context.xml.bak │ │ logging.properties │ │ server.xml │ │ server.xml.bak │ │ tomcat-users.xml │ │ web.xml │ │ │ └─Catalina │ └─localhost ├─jdk1.7.0_21 │ │ COPYRIGHT │ │ LICENSE │ │ README.html │ │ release │ │ src.zip │ │ THIRDPARTYLICENSEREADME-JAVAFX.txt │ │ THIRDPARTYLICENSEREADME.txt │ │ │ ├─bin │ │ appletviewer.exe │ │ apt.exe │ │ extcheck.exe │ │ idlj.exe │ │ jabswitch.exe │ │ jar.exe │ │ jarsigner.exe │ │ java-rmi.exe │ │ java.exe │ │ javac.exe │ │ javadoc.exe │ │ javafxpackager.exe │ │ javah.exe │ │ javap.exe │ │ javaw.exe │ │ javaws.exe │ │ jcmd.exe │ │ jconsole.exe │ │ jdb.exe │ │ jhat.exe │ │ jinfo.exe │ │ jli.dll │ │ jmap.exe │ │ jps.exe │ │ jrunscript.exe │ │ jsadebugd.exe │ │ jstack.exe │ │ jstat.exe │ │ jstatd.exe │ │ jvisualvm.exe │ │ keytool.exe │ │ kinit.exe │ │ klist.exe │ │ ktab.exe │ │ msvcr100.dll │ │ native2ascii.exe │ │ orbd.exe │ │ pack200.exe │ │ policy

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧