【问题标题】:How to compile Java files that put .class files directly into JAR如何编译将 .class 文件直接放入 JAR 的 Java 文件
【发布时间】:2012-05-10 10:16:45
【问题描述】:

首先参考:
1st Link
2nd link

第一篇文章1st Link 提到将Java 文件直接编译成JAR 文件并避免构建过程中的一个步骤。有人知道吗?

-瓦迪拉杰

【问题讨论】:

  • 我想你误会了。文章说,“总是一步编译和 jar”,即编译类,将它们 jar 起来,然后使用 jar 运行测试以减少 IO。它没有说明将文件直接编译到 jar 中。
  • @dogbane - 你应该把它放在答案中
  • .. 但是当我从第一个 [1] 参考“(java 编译器支持直接写入 jars 但由于某种原因不使用它)”中读到这一行时,我很困惑。

标签: java jar javac


【解决方案1】:

当你链接到我的博客文章时,我认为给你更新是公平的。

直接编译成 Jar 实际上相当简单。基本上你扩展了

javax.tools.ForwardingJavaFileObject

然后覆盖openOutputStream 方法并将其定向到您的Jar。由于 Java 编译器是高度并发的,但写入 jar 文件是高度连续的,我建议您缓冲到字节数组,然后有一个后台线程在字节数组到达时写入它们。

我正是这样做的,这是我的实验性构建工具 JCompilo https://code.google.com/p/jcompilo/ 该工具完全没有文档记录,但速度非常快。目前,它比任何其他 Java 构建工具快约 20-80%,比相同代码的 Scala 编译器快约 10 倍。

【讨论】:

    【解决方案2】:

    由于作者正在谈论扩展编译器本身,他可能了解编译器的内置功能(这是编译器的能力,也许通过调整代码得到一点鼓励) .

    现在我正在研究扩展 Java 6 编译器以删除不需要的文件存在检查,并可能直接在编译器中对类文件进行 jaring。 [强调我的]

    但是,该功能肯定不受官方支持(javac webpage 上没有关于它的文档)。

    该功能充其量是依赖于编译器的;可能需要修改编译器的源代码。

    【讨论】:

    • 可能是。感谢您的澄清。
    猜你喜欢
    • 2019-01-31
    • 2015-11-20
    • 1970-01-01
    • 2017-05-10
    • 1970-01-01
    • 2012-06-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多