手头的项目目前是JDK4+WAS6,为了能用JDK5来开发,需要使用Retrotranslator将JDK5编写的代码转换为JDK4。你知道,没有泛型、迭代器、Annotation、自动装拆箱等语法特性,开发Java就恶上加恶了。以下是搜集的一些资料,先贴在这里,以防丢失。是否能真的使用J5,还不得而知,上帝保佑吧。
原文地址:http://www.zxbc.cn/html/20081215/68967.html
项目在开发时使用JDK5+MyEclipse5.5+Tomcat6环境、Struts2+Spring2+Hibernate3框架以及DWR和E3 Tree技术。项目准备打包部署时客户说要部署在WebSphere6.0服务器上,那时我的头真大了,听说用WebSphere很麻烦,而且又是WebSphere6.0,WebSphere6.0只支持JDK1.4,我的项目用到了Struts2和JDK5的新特性啊,真是疯了,一直抱怨着客户无事找事折磨我们。
总结一点还是我经验不足,遇事不够冷静,没认真分析,害怕麻烦,导致我走了好多弯路,浪费了好多时间,现在与大家分享一下,以免大家再次犯此类错误。
首先,明确WebSphere的版本。确定WebSphere6.0对环境的要求,这一点很重要,我就栽在这点上。WebSphere6.0的环境是JDK1.4,Servelet2.4、JSP2.0,清楚了这点后再考虑其他的问题。
第二,WebSphere6.0只支持IBM自带的JDK1.4,我用JDK5开发的,那么关于JDK5的新特性必须改为JDK1.4的(其实新特性不改也行,只要用工具Retrotranslator将已经编译过的JDK5的CLASS转换为JDK1.4的CLASS,不过那样以后要是你修改项目的话,又要重新转换CLASS,那样会很麻烦,所以我还是修改了JDK5的新特性),再在MyEclipse中将项目的编译环境设置为JDK1.4的,安装的JDK版本不用改,可以继续用JDK5来开发。
第三,Struts2使用的开发环境是:JDK5、Servelet2.4、JSP2.0。这些都不冲突,关键是Struts2的架包是JDK5编译的,所以这是个问题,不过Struts2的开发者都为我们考虑到了,在struts2目录下的backport目录中提供了Retrotranslator转换工具,其中struts2-core-j4-2.0.11.1.jar和xwork-j4-2.0.4.jar已经转换好了,如果用到了Struts2的其他架包,你就要手工转换。架包的转换方法:在CMD中进入backport目录,再键入如:java -jar retrotranslator-transformer-1.2.2.jar -advanced -srcjar E:\GSLY\WebRoot\WEB-INF\lib\架包名 -destjar 新架包名。这样架包就可以转换为JDK1.4的了,再将backport目录中的backport-util-concurrent-3.0.jar、retrotranslator-runtime-1.2.2.jar和你转好的包扔到项目lib目录下,原来的删除即可。记住,只要你用到了Struts2的架包最好都要转换,以免出现其他麻烦。
第四,E3 Tree要求:Servelet2.4、JSP2.0。这个与WebSphere6.0不冲突。
第五,Web.xml里的配置要按照规范写,特别是元素的顺序问题,WebSphere对XML的要求很严,不像Tomcat,其余也没什么要求,我的项目现在都可以在WebSphere6。0上跑了,呵呵....
这方面网上的资料还是蛮多的,不明白的可以GOOGLE下,最重要的还是要搞清楚第一点,对症下药。虽然WebSphere的使用很麻烦,但客户喜欢,我们做开发的也没办法,只能依着他们,谁叫客户是上帝呢。嘿嘿,加油!
附注:
WebSphere5.1:JDK1.4,Servelet2.3、JSP1.2
WebSphere6.0:JDK1.4,Servelet2.4、JSP2.0
WebSphere6.1:JDK5.0,Servelet2.4、JSP2.0
Tomcat4.1:JDK1.4,Servelet2.3、JSP1.2
Tomcat5.5:JDK5.0,Servelet2.4、JSP2.0
Tomcat5.5:JDK5.0,Servelet2.4、JSP2.0
Tomcat6.0:JDK5.0,Servelet2.5、JSP2.1
Struts2:JDK5.0,Servelet2.4、JSP2.0
E3 Tree:Servelet2.4、JSP2.0
原文地址:http://peony07.blogbus.com/logs/107368003.html,版权声明
进入项目组的时候,项目框架就已经搭好了,Struts2+spring2.5.6+ibatiS2.3.4+jdk1.5. 可能是以前一直用s1sh的架子,一直都很难接受ibatiS的配置模式,所以对这框架不怎么感冒。但是我是农民工嘛,说啥做啥呗。谁知项目都快要上线了,老大抛出一个雷,生产环境犹豫某些原因只能用jdk1.4......我勒个去!struts2 默认需求就是jdk1.5,悲剧了。
要想应用JDK1.4,使用的主要的是Struts2.0的发行包里提供的J4目录中的Retrotranslator.利用它可以将原JDK5的包转化成JDK1.4的.关于Retrotranstator的介绍,可以查看http://retrotranslator.sourceforge.net/,里面写的很详细.
在J4目录中,已经将Struts2.0基本的两个Jar文件转好了,分别是struts2-core-j4-2.0.9.jar和xwork-j4-2.0.4.jar.如果你的程序中还用到的其他的Jar包,可以通过脚本把Jar包转成J4版本的.我们的程序中用到了spring和ibatis两个Jar包,所以需要将这两个包转成J4的.执行以下命令之前需要把Retrotranslator-1.2.9-bin.zip下的文件解压到你的jdk1.5的bin目录下。
java -jar retrotranslator-transformer-1.2.9.jar -advanced -srcjar D:\lib\spring-framework-2.5.6.jar -destjar D:\lib\j1.4\spring-framework-j4-2.5.6.jar;java -jar retrotranslator-transformer-1.2.9.jar -advanced -srcjar D:\lib\ibatis-2.3.4.726.jar -destjar D:\lib\j1.4\ibatis-j4-2.3.4.jar;
转换之后把新的包加载进系统,再将J4目录中的retrotranslator-transformer-1.2.2.jar, backport-util-concurrent-3.0.jar和retrotranslator-runtime-1.2.2.jar一起放到WEB- INF/lib下.并修改新工程的编译级别为1.4。当然项目中用到的jdk1.5的特性都是需要手动修改的,我们系统中用到了大量的泛型,以及一些循环,额,改起来比较费劲,足足改了一上午。 然后启动tomcat,还是报错,进入tomcat的启动日志看,发现还有一些用到的插件包需要转换,
java -jar retrotranslator-transformer-1.2.9.jar -advanced -srcjar D:\lib\struts2-convention-plugin-2.1.8.1.jar -destjar D:\lib\j1.4\struts2-convention-plugin-j4-2.1.8.1.jar; java -jar retrotranslator-transformer-1.2.9.jar -advanced -srcjar D:\lib\struts2-spring-plugin-2.1.8.1.jar -destjar D:\lib\j1.4\struts2-spring-plugin-j4-2.1.8.1.jar; java -jar retrotranslator-transformer-1.2.9.jar -advanced -srcjar D:\lib\jsonplugin-0.34.jar -destjar D:\lib\j1.4\jsonplugin-j4-0.34.jar;
一次次的调试,重启了3次····最后终于不报错了。tomcat5.0+jdk1.4.2测试通过。
PS:项目做到这种地步,哎·我都不说什么了。不过这次的问题是由我来解决的,个人还是比较有成就感的,因为没有经验,开始时心里是没底的,硬着头皮上,最后摸摸索索,还是给整出来了。所以觉得再烂的项目,也有值得你学习的地方,值得你认真对待的方面,没有试过怎会知道结果呢。老大一直想我把业务这一块把控起来,我比较懒,怕麻烦,一直在推托,现在想想,也许是时候踏出那一步了。
原文地址:http://www.blogjava.net/calvin/archive/2006/04/27/43443.html
因为Retrotranslator的出现,SpringSide终于放心升到JDK5.0,只要用户在build的时候选择war14 task,生成的war就保证仍然100%运行在JDK1.4的服务器上。在最新的retrotranslator 1.0.7 支持下,SpringSide在Tomcat 5.0+JDK1.4上部署成功。
不能随意更改运行环境JDK的历史项目,客户真金白银买了不支持JDK5的Weblogic8.1的项目,一般只能看着JDK5的annotation、泛型和EJB3干咽口水,所以上帝說要有光,我们有了这个恩物。
和以前推荐的Retroweaver一样,大家直接用JDK5开发,如果需要部署到JDK1.4的运行环境,就通过asm把Class转到JDK1.4的字节码。
但它不仅支持JDK5的新语法,还大量支持JDK5的新增API。
Retrotranslator的用法很简单,可以用命令行、Ant和IDEA插件自动转换,http://retrotranslator.sf.net 上讲得很清楚,可以转换Jar,也可以转换Class目录。
比较特别的是有个Verify选项,能确保你没有用到它暂时还不支持的JDK5 API(记得Classpath里要加入JDK1.4的rt.jar)。
附:springside war14 任务简述
war14在打包时,会调用/misc/jdk14/build.xml, 为drools,compas,easymock2等几个使用了JDK1.5技术的jar 生成jdk1.4的版本,并为项目的classes 目录生成JDK1.4的版本,然后用它们替换war中原来的内容即可。
注意用户可能要自己在/misc/jdk14/build.properties中设一下jdk1.4的路径。
build.xml 片断:
<target name="jdk14src"> <taskdef name="retrotranslator" classpathref="compile.classpath" classname="net.sf.retrotranslator.transformer.RetrotranslatorTask"/>
<retrotranslator destdir="classes" verify="true"> <src path="http://www.cnblogs.com/springside-bookstore/webapp/WEB-INF/classes"/> <classpath location="${jdk14_home}/lib/rt.jar"/> <classpath refid="compile.classpath"/> </retrotranslator>
</target>
原文地址:http://txxm.iteye.com/blog/59612
项目之初,考虑到主流应用服务器大都开始支持Jdk1.5,另外一些开源库也要1.5才能运行,所以Jdk决定采用1.5版本。1.5的新特性确实很爽,呵呵。等到项目快结束的时候,又要求支持1.4,理由是用户现有服务器有可能不支持1.5。代码改成支持1.4,不仅浪费时间,而且还要放弃1.5的特性。看到网上介绍Retrotranslator,感觉不错,今天试用了一下,结果相当满意,tomcat5.0 + jdk1.4 将我的应用跑了起来,呵呵。
下面我将操作步骤记录下来:
1、在Jdk1.5下编译java源文件(这时的class只能在1.5下跑);
2、下载Retrotranslator,我用的是1.2.1版,解压后可得到三个jar,retrotranslator-transformer-1.2.1.jar、backport-util-concurrent-3.0.jar、retrotranslator-runtime-1.2.1.jar;Retrotranslator可以命令行、ant或maven任务、Intellij idea plugin方式运行,下面以ant任务方式运行;
3、参考以下ant脚本(附件),需要修改相应部分:
(注:该脚本不仅转换classes目录下的class文件,而且还转换1.5下发布的jar,如:hibernate-annotations-3.2.1.ga.jar,生成相应的1.4版本。)
4、在jdk1.4环境下(例如tomcat5.0+jdk1.4环境),用1.4版本的jar替换原有的jar,用转换后的class替换原有的class;
5、将backport-util-concurrent-3.0.jar、retrotranslator-runtime-1.2.1.jar添加到WEB-INF/lib目录;
6、启动tomcat,不出问题的话,应该能跑起来!