将项目从C#迁移到Java

时间:2009-04-11 19:01:01

标签: c# java porting code-migration

随着办公室人员配备的一些变化,C#专业知识的水平急剧下降,现在有更多的Java开发人员。它已经达到了高层正在考虑将用C#编写的现有.NET项目移植到Java世界的程度。

除了starting completely from scratch的明显问题,该公司可以通过哪些方式成功地将项目开发从.NET C#转移到Java?

15 个答案:

答案 0 :(得分:19)

以下是需要考虑的事项:

  • 这是一个大项目吗?如果是,请尝试坚持使用C#
  • 这个中型项目是否包含组件?如果否,请尝试坚持使用C#
  • 这个小项目是否只在Windows上部署?如果是,请尝试坚持使用C#
  • 这是旧的源代码吗?如果是,请尝试坚持使用C#
  • 您是否使用Windows操作系统特定的API?如果是,请尝试坚持使用C#
  • 您是否使用没有Java对应的任何第三方API?如果是,请尝试坚持使用C#
  • 您是否在“深度”(数据绑定,用户控件等)中使用.Net?如果是,请尝试坚持使用C#
  • 迁移时间比获得新的/转换的C#人更容易接受?如果不是,请尝试坚持使用C#
  • 如果您要使用会改变演示文稿的Java框架,您认为最终用户不会接受更改吗?如果是,请尝试坚持使用C#
  • 查看商业广告

如果您决定转换:

  • 按组件搜索
  • 每层进行
  • 进行大量测试
  • 检查是否有工具可以提供帮助(无论有多少帮助),但

答案 1 :(得分:15)

为了补充Brian和Eric的意见,我想说在我看来,为Java开发人员提供C#应该是直截了当的。它们在概念上非常相似,我建议您培训Java开发人员以获得一些C#技能,这样您就不会被迫去处理迁移过程中的麻烦。

答案 2 :(得分:5)

我赞同乔尔的观点a total rewrite is almost always a mistake。其他海报是正确的:C#和Java足够相似,任何有能力的Java开发人员都应该能够在几周或几个月内成为C#的主管。这并不是说他们会成为专家。这需要更长的时间,但只要你有一些C#开发人员可以指导这个过程那么你应该没问题。

如果不了解您的应用程序的具体情况,很难评论这种转变是好是坏:大小,应用类型,行业等。

对于这样的转换,我会非常保持沉默,因为在我看来,C# is now a much more modern language than Java我和你说这是十多年来一直是Java开发者的人(自1.0.2 / 1.1以来)天)。

这并不是说Java很糟糕。不是。 Sun确实有一个悬在它上面的云,并表明近年来不愿意或无法推动该平台向前发展。

答案 3 :(得分:4)

无论涉及哪种语言,该公司的管理层听起来都很疯狂。对于除了一个简单的应用程序以外的任何东西,如何从头开始重写整个代码库而不是仅仅聘请具有正确语言的某些技能的单个人在经济上是否合理?这是一个众所周知的问题:太多的闲钱?!

现有代码已开发多长时间了?如果它刚刚开始,我可以理解这一点。如果它被发布并且拥有活跃用户,那么永远不会将其丢弃。如果您将C#代码捐赠给具有合适技能的初创公司,请考虑一下他们对您的启动程度。

答案 4 :(得分:4)

在完成将.NET项目转换为Java之前,所有参与转换项目的Java开发人员都将学习C#。那么你就不再需要将它转换为Java(并且你可以丢弃转换中生成的所有Java代码),因为现在你有一个可以同时执行Java和C#的开发团队。问题解决了。 :d

答案 5 :(得分:2)

如果有任何已经隔离的组件或其中任何组件使用面向服务的体系结构,您可以想象一次迁移一个组件(每个组件都是重写)并且仍然可以让组件相互通信使用相同的可互操作网络协议。可能取决于我们正在谈论的应用程序类型。

答案 6 :(得分:2)

确保您有吨的测试,因为这样的迁移会让您最不喜欢它。

答案 7 :(得分:1)

生产中是否有更多.Net或更多Java应用程序。如果您已经对.Net服务器和应用程序进行了大量投资,为什么不要求Java开发人员中的志愿者转移到.Net?语言和语法非常相似,所以很难学习框架,除非他们花费所有时间进行UI开发,即使学习框架也不是那么难。

在我们的办公室里,我们有许多非常优秀的开发人员,他们根据需要在Java和.Net之间来回移动。

答案 8 :(得分:1)

为了向管理层证明,您总是需要谈谈投资回报率和数字。告诉他们,如果你移动这些应用程序,它将花费大量的时间,质量保证资源,并且如果由于某些其他项目或新的开发变得非常重要而被取消优先级,则可以轻松退居二线。

当我向他们展示时间表,投资回报率,涉及的工作,涉及金钱等时,我取得了成功。

现在谈到实际问题,我确实认为Java开发人员能够支持C#,除非他们对Microsoft技术有一些基本的心理障碍。

答案 9 :(得分:1)

查看Net2Java,它可以帮助您将代码从C#转换为Java。我怀疑它会是完美的,但它是从任务中删除大量苦差事的一种方法,让你留下不兼容的框架调用和语言功能的纠结。

完成后,您的任务就像任何其他大型迁移项目一样 - 再次进行测试,测试和测试。单元测试,系统集成测试,然后是最终用户测试。您应该使用原始应用程序中已经存在的那些测试,除了单元测试之外,它们仍然是相关的。

答案 10 :(得分:1)

如果决定这样做,您很可能会从混合方法中受益,您可以在同一个应用程序中基本上混合使用C#和Java,因为它会将场景从瀑布式转换更改为渐进式迁移。在这里,我知道两种可能性:

1)ikvm(http://www.ikvm.net/)允许您在.NET运行时中运行Java代码。这允许Java代码调用C#代码,反之亦然。然后,您可以冻结C#代码开发,并在保留功能应用程序的同时,将修改后的功能慢慢添加到Java部分。

2)Mainsoft(http://dev.mainsoft.com/Default.aspx?tabid=130)允许您将.NET字节码编译为Java字节码。他们有免费入门版本。我没有使用该产品的经验,但他们在我们的平台上做了大量宣传,该平台只提供Java。

答案 11 :(得分:0)

我不是Java专家,但根据我作为C#粉丝使用Java代码的经验,以下是一些可能的麻烦:

  • 泛型在Java和C#中的实现方式不同。
  • Java和C#
  • 之间的装箱/拆箱行为有所不同
  • Java类命名约定+批量C#生成代码
  • 字符串处理(即Unicode / ASCII问题)可能会有问题,具体取决于移植的Java / C#代码的质量。

就个人而言,我认为从头开始写作根本不是一个坏主意。因为你已经有了一个有效的架构。

答案 12 :(得分:0)

我甚至没有人提出拒绝迁移的想法,我感到有点惊讶。

我不相信C#开发人员可以被迫切换到Java(反之亦然),因为他被告知(好吧,如果他可能会用枪威胁)。我花了很多时间,锻炼和激情来掌握至少一个技术堆栈。您无法通过新技术在一夜之间开始,并期望提供相同的质量。

在被告知要开始迁移之前,我个人不会打扰。在这一点上,我告诉经理我是.NET的人,不会因为他们的决定而改用其他技术。

至于技术方面,不是语言语法不同,而是库及其功能。当然,如果.NET 3.5的所有最新功能都被广泛使用,那么语言差异将为您提供真正的挑战。

这当然是一种有趣的方式,只是决定将应用程序从.NET迁移到Java。有人不知道所涉及的麻烦......

答案 13 :(得分:0)

你可以使用jni4net - opensource bridge吗? 或者我知道的other options列表。

答案 14 :(得分:0)

我意识到这是一个老问题,但对于沿着这条路走下去的其他人,你可以试试这个开源的 C# 到 Java 转换器:

http://www.cs2j.com/