您的位置:首页 > 编程语言 > C#

把Java项目的代码转换为C#代码

2016-03-30 17:22 274 查看
一个项目是Java开发的代码,转换成C#的代码,

工具介绍:

转换过程中用到了Eclipse的插件:j2cstranslator,项目地址在http://sourceforge.net/projects/j2cstranslator/ ,但能找到的最近插件下载地址在:http://sourceforge.jp/projects/sfnet_j2cstranslator/releases/,下载最新的插件com.ilog.rules.Java2CSharpTranslator_1.3.6.20110519_01.jar,有1.2M。通过插件可以方便的从Eclipse下把代码转换成C#代码,但为了让转换后的C#代码正常运行,还需要j2cstranslator插件官方提供的映射文件J2CSMapping,它的作用是让java的一些特性和c#的特性关联起来,正常编译并运行。对应的有.net2.0,3.5,4.0等不同映射文件。映射文件只有一个ILOG.J2CsMapping.dll。

但是用插件配套提供的映射.net文件,在VS下编译仍然有一些错误无法编译,经过大量尝试,我找到了另外一个.net开源工具:IKVM.NET,官方地址:http://www.ikvm.net/ 。IKVM内部实现了用.net写的JAVA虚拟机功能,并且包括从Jar包直接转换为dll的命令行工具,以及java和.net之间互相调用的环境支持。IKVM提供了30个dll文件以及3个exe文件。IKVM的一些调用和转换方式可以网上搜索下其他资源,我在转换后的项目中只引用了IKVM.OpenJDK.Core.dll文件就能编译通过,但最后运行时依靠IKVM的其他dll文件才运行正常。

转换为生产可用代码:

实际在转换IBE代码过程中,引用了ILOG.J2CsMapping.dll和IKVM.OpenJDK.Core.dll以及其他IKVM的dll后还是会有一些报错,比如java里用的super,.net里用的base调用基类等等问题,需要手工修改。Java中的socket处理方式和.net也不一样,需要手工修改代码。

要想在生产上使用,肯定不能依赖太多外部dll,虽然IKVM是开源的,但内部会有一些非托管的c++代码。到生产上使用,肯定要尽量少的依赖外部DLL,用.NET自身框架的代码实现JAVA的实现方式,这块就要根据实际情况灵活处理了,我在转换IBE过程中,发现大多是socket和Calendar的转换工作,经过不断调试和分析,终于替换掉了这些代码的转换。当然根据不同JAVA项目,可能需要转换的对象和处理方式不一样,需要对症下药了。

IKVM 工具用于编译生成.dll文件

转换过程:

装好Eclipse的插件后,打开JAVA版IBE源码,然后选择Eclipse的File->Export…,如图一:



图一

导出页面Other里多了一个ILOG Java to CSharp Translator选项,一路选择Next,后面有选择转换后的生成目录。转换后是没有csproj的项目文件,全部是.NET的源代码.cs文件。

然后新建.NET的解决方案,再新建一个.NET的项目,把转换后的文件包含到解决方案里。项目引用ILOG.J2CsMapping.dll和IKVM.OpenJDK.Core.dll文件,然后编译。这时可能还会出现很多错误,因为任何工具都不是万能的,尤其是对编程语言的互相转换,还需要手工进行一定的修改。

最后根据不同类型特性,再把依赖于外部的API方法手工切换到.NET自身框架提供的API,由于涉及代码保密,就不举例了。

源文件:http://www.cnblogs.com/Lawson/archive/2012/02/21/2361827.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: