GCC原生Java编译器作为典型开源Java项目的平台有多实际?

GCC原生Java编译器作为典型开源Java项目的平台有多实际?,java,gcc,Java,Gcc,编辑 关于这个问题的最初理由是一个相当严重的时机错误的案例,因此在编辑史上被隐藏了起来。简言之,FOP1.0即将面世,因此动机基本消失。除此之外,真正的动机还是挫折感 然而,这里有一个合理的问题——GCC原生Java编译器GCJ对于构建真实世界的开源Java项目(如FOP)有多实际?它可能有多困难,可能会发生什么样的问题 例如,我现在了解到gcj实现了JDK1.2语言,并且与JDK1.2库“基本兼容”——远远落后于Java6/1.6。此外,libgcj缺少很多库,特别是与GUI相关的库。缺少AW

编辑

关于这个问题的最初理由是一个相当严重的时机错误的案例,因此在编辑史上被隐藏了起来。简言之,FOP1.0即将面世,因此动机基本消失。除此之外,真正的动机还是挫折感

然而,这里有一个合理的问题——GCC原生Java编译器GCJ对于构建真实世界的开源Java项目(如FOP)有多实际?它可能有多困难,可能会发生什么样的问题


例如,我现在了解到gcj实现了JDK1.2语言,并且与JDK1.2库“基本兼容”——远远落后于Java6/1.6。此外,libgcj缺少很多库,特别是与GUI相关的库。缺少AWT,在FOP的情况下,这意味着GUI查看器是一个问题。老实说,生成.ps或.pdf或其他格式并查看它们有什么不对?

Fedora项目已经用它编译了相当多的库和应用程序一段时间了。你可能希望看到他们的努力/成功

我在这个阵营中仍然不明白Java1.5和Java1.6是如何比Java2更新的(或者它们是Java2的变体?)

把这种矛盾归咎于孙

有两种版本编号系统。最初的JVM版本控制系统是1.0、1.1、1.2.x、1.3.x、1.4.x、1.5、1.6。“营销驱动”的数字系统(Sun在其发布的材料中使用)是Java 2、Java 2 1.3.x、Java 2 1.4.x、Java 5.0和Java 6。所以数字“1.2”和“Java2”的意思是一样的,“1.3.x”和“Java21.3.x”的意思是一样的,以此类推

之所以会这样,是因为Sun的业务人员决定他们必须拥有Java2.0,因为Java1.2(对It记者等)看起来只是一个小版本。当然,这与主要版本号的既定含义相矛盾,即它只会因主要破坏向后兼容性的Java版本而改变

最终的结果是一个混乱的双版本编号,只有当您意识到以后的Java版本有两个版本号时才有意义。(而SE/EE/ME资格……在其各种表现形式中……只是增加了混乱。)只要学会接受它


(但是,如果你认为这很疯狂,那么看看微软的数量吧!)

你可能会发现的问题大多与GCJ中未实现的API或错误的库实现有关。还有一些语言功能没有得到很好的支持,例如反射。

为什么不直接使用Java?

在您试图使用一些很久没有发布的项目的情况下,值得查看项目邮件列表

这是邮件列表的存档。首先,请注意邮件列表是活动的。很多帖子。其次,如果你看一下2010年7月的邮件,你会发现他们投票同意接受FOP1.0发布分支。我不确定这意味着什么,但我怀疑这意味着1.0很快就会发布

关于是否使用GCC本机编译器的一般问题,没有特别的理由不使用。但也没有特别的必要这样做,也没有特别的理由怀疑这会有所帮助。我个人更喜欢使用Sun的JVM。听起来,您可能会因为试图摆脱Sun安装的运行时依赖性而使自己的生活变得困难

编辑

我不相信“依赖地狱”有那么糟糕。一方面,您(作为主要开发人员)应该能够找出能够工作的组件版本的某些组合。然后你说“这些是我们推荐/支持的版本”。如果人们想使用不同的组合,这是他们的责任

另一方面,如果使用作为构建框架,那么依赖项将在项目POM文件中显式声明。如果您确保发布到公共存储库,并且您发布的工件仅依赖于正确发布/发布的第三方工件,那么您的客户应该不会有任何困难,或者直接构建您的软件,或者通过Maven存储库下载。如果他们想修补依赖关系,他们可以这样做

编辑2

使用GCJ作为一种防止用户破坏依赖关系的方法(IMO)是一个坏主意。通过使用GCJ将依赖项硬连接到二进制分布中,您限制了用户“修补”的能力。对于基于FOP的应用程序,修补的能力似乎相当重要

(GCJ显然导致FOP崩溃这一事实是使用常规Sun Java的另一个实际原因。)

编辑3

我想补充一点,您还可以选择使用/推荐人们使用OpenJDK。OpenJDK是所有最新主流Linux发行版AFAIK的一部分。

请参阅错误报告。它已经4年了,但是它被标记为FOP1.0dev,所以我想它仍然是相关的。看起来,如果没有黑魔法,您将无法使用gcj编译它。

因为这似乎是一个“我需要一个预先打包的FOP版本,而且我根本不想听到错误报告”,而不是“我们需要FOP作为另一个产品的一部分,这将引起开发人员相当长时间的关注,并且这是正常工作的关键”,我强烈建议您走主流,创建一个传统的基于字节码的包,它需要Sun JVM运行

您很可能会发现“可执行jar”概念很有趣,因为它允许您将启动脚本简化为“java-jar…/myfop.jar”。Eclipse“Export”函数将其命名为“runnable jar”


编辑:之后