【问题标题】:Faster javac/ant?更快的 javac/ant?
【发布时间】:2010-10-22 02:06:46
【问题描述】:

我发现 java 几乎可以立即启动并运行 - 但 javac 需要几秒钟,而 ant 又让它变慢了。只有几秒钟,但没有它我的编辑-编译-测试循环会更顺畅。 :-)

顺便说一句:我已经在 ant 中使用过 vim 的 ":make"。

有没有办法加快 javac 和/或 ant 的速度?我正在考虑特殊的开关或技巧?或者可能是一个替代的 java 编译器(我在 linux 中使用 1.6)

【问题讨论】:

    标签: java ant time build javac


    【解决方案1】:

    Eclipse 会为你做这些......但它可能有点像你的问题的“补丁”。

    除此之外,您还可以推出自己的编译器插件。有两种方法:

    1. 从 ant 中运行 java 编译器(而不是创建新进程)。不确定蚂蚁是否已经这样做了;如果没有,那将为您节省一些时间。详情请看Java 6 compiler API

    2. 在侦听套接字选项的服务器进程中运行 javac。在 ant 中,向进程发送命令行并等待输出返回。节省您一直启动新流程的时间。

    3. 尝试使用 eclipse 编译器。与最初的 javac 不同,Eclipse 编译器非常擅长“忽略”错误,因此即使它们包含错误,它也可以生成类文件。这似乎意义不大,但它允许您一直在后台编译。当您进行最后一次保存(将所有内容打包)时,编译器将能够编译其他所有内容,并且只需要查看一个文件。

    【讨论】:

    • 谢谢, 1. 我认为是否有蚂蚁分叉是一个选项。 2. 设置一个 java 服务器进程是个不错的主意,虽然我不知道如何去做 :-)。 3. 大多数时候(并非总是)只有一个文件要编译(尽管我看到编译器也已经加载了)
    • 我写了一个javac服务器(2),现在编译感觉很即时!这个真的很酷。 (大约 0.5 秒;从 3-4 秒下降)。服务器在发送 javac 选项时调用 JavaCompiler.compile,并将 stderr 重定向到客户端,因此客户端的行为与 javac 没有区别(只是更快)。没有与 ant 集成,因为 ant 本身增加了 1-2 秒(我可以不用 ant 也可以),但我可以告诉 ant 我的客户端是一个编译器。我用“pkill java”停止服务器 - 我想发送“停止”消息是正确的方法。
    • 加载 Java 编译器需要很多时间(它必须设置环境、加载 VM 的所有类、分配大量内存等)。加载(少数)文件进行编译实际上非常快。
    【解决方案2】:

    Google 找到了这两个(我还没有尝试过)

    1. javac-J-client -J-Xms100m -J-Xmx100m<src>

    2. JBrownie“监控 Java 源代码并自动重新编译任何发现更改的文件”,类似于 Aaron Digulla 的 (2)

    【讨论】:

    • 第一个链接已损坏,OpenJDK 似乎缺少 -J-client 选项
    【解决方案3】:

    我强烈建议您使用适合 Java 的 IDE,因为使用了解您的程序的编辑器可以极大地提高生产力。想想“转到包含光标所在变量/类/字段定义的行”,“重命名这个类和对它的所有引用”,以及所有其他类型的好东西。如果您对调用 Java 所花费的时间感到恼火,那么您可能已经准备好了 :)

    【讨论】:

    • 问题是关于编译,而不是调用 java(“java 启动并几乎立即运行”)。使用 ^],vim + ctags 将“转到包含光标所在变量/类/字段定义的行”。我发现 IDE 更烦人且效率更低(试用一周),尽管我希望它们非常有用。
    • 即使 java 几乎立即启动并运行,javac 也不是您所抱怨的。您是尝试自学 IDE,还是有经验丰富的开发人员指导您?
    • 问了这个问题,我知道了。我指出您似乎没有阅读该问题。我不确定我想和你谈谈,因为你看起来很傲慢,用你的“你可能准备好了”的台词。哦,好吧,我试试看:我在没有经验丰富的用户的情况下自己尝试了 IDE。但是,在学习 vim 的过程中,我身边有很多经验丰富的用户,所以这可能对我有很大帮助。从您的回答看来,您似乎对 vim 不熟悉。
    • 任何以 Java 编程为生的人都因为不使用现代 IDE 而浪费了自己的时间和雇主的钱。
    • 没问题。如果您仍然需要快速的增量编译器,请查看 Jikes。
    【解决方案4】:

    你可能想看看JavaRebel

    【讨论】:

      【解决方案5】:

      我将所有输出文件指向一个我用this utility 创建的虚拟磁盘。它加快了构建速度(尽管没有达到神奇的程度),因为几乎所有内容都在内存中。当进行几乎即时的“干净”构建时,这一点最为明显。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-07-15
        • 2011-08-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-07-03
        • 2011-06-19
        • 2014-03-08
        相关资源
        最近更新 更多