答案 0 :(得分:3)
当你链接到我的博客帖子时,我认为给你一个更新是公平的。
直接编译到Jar实际上很简单。基本上你扩展
javax.tools.ForwardingJavaFileObject
然后覆盖openOutputStream
方法并将其指向您的Jar。由于Java编译器是高度并发的,但是写入jar文件是高度顺序的,我建议您缓冲到字节数组,然后有一个后台线程在字节数组到达时写入它们。
我确实这是我的实验构建工具JCompilo https://code.google.com/p/jcompilo/ 这个工具完全没有记录,但很快就疯了。目前,它比任何其他Java构建工具快20-80%,比相同代码的Scala编译器快约10倍。
答案 1 :(得分:1)
由于作者正在讨论扩展编译器本身,他可能已经了解编译器的内置功能(这是编译器能够实现的功能,也许通过调整代码可以稍加鼓励)
现在我正在调查扩展Java 6编译器以删除不需要的文件存在检查并可能直接在编译器中对类文件进行jaring。 [强调我的]
然而,这种能力肯定不会得到正式支持(javac webpage上没有关于它的文件。)
充其量,该功能依赖于编译器;可能需要修改编译器的源代码。