当前位置: 首页 > 面试题库 >

标准Sun javac可以进行增量编译吗?

严升
2023-03-14
问题内容

最近,我开始使用Eclipse的Java编译器,因为它比标准Javac快得多。有人告诉我它更快,因为它执行增量编译。但是我对此还不太确定,因为我找不到有关eclispse和sun的编译器“增量功能”的任何权威文档。Sun的编译器总是编译每个源文件,Eclipse的编译器只编译更改的文件以及受此更改影响的文件,这是真的吗?

编辑:我没有使用Eclipse自动构建功能,而是在设置

-Dbuild.compiler=org.eclipse.jdt.core.JDTCompilerAdapter

为我的蚂蚁建造。


问题答案:

Sun的编译器总是编译每个源文件,而Eclipse的编译器只编译更改的文件以及受此更改影响的文件,这是真的吗?

我相信您在这两个方面都是正确的。

当然,您可以强制Eclipse重新编译所有内容。

但是等式的另一部分是,Java构建工具(例如Ant和Maven)仅能够编译已更改的类及其依赖类树。

编辑

在Ant中,可以通过两种方式完成增量编译:

  • 默认情况下,该<javac>任务会比较.java和相应.class文件的时间戳,只告诉Java编译器重新编译比其相应目标(.class)文件新的源文件(.java),或者根本没有目标文件。 。

  • <depend>任务还考虑了类之间的依赖关系,该任务通过读取和分析嵌入在.class文件中的依赖关系信息来确定。确定哪些.class文件已过时后,该<depend>任务将其删除,因此后续<javac>任务将重新编译它们。但是,这并非完全傻瓜。例如,对源代码进行大量更改可能导致<depend>任务正在分析过时的依赖关系。同样,某些类型的依赖关系(例如,对静态常量的依赖)在.class文件格式中也不明显。

要了解为什么Ant
<depend>不安全,请阅读文档的“限制”部分。



 类似资料:
  • 为什么要编译安装 包管理系统是绝大多数发行版的必备组件,也是一个发行版区别于其它发行版的主要特征。但是有些软件,并不能通过包管理系统安装,这就需要下载源码编译安装。 一个软件可能有许多功能,但是发行版中提供的安装包,通常只具有一些常见的功能。如果提供所有功能,那么无疑会占用更多的资源,而这些功能,大多数用户不会用到;[24]而你会用到的功能,可能安装包中刚好没有。编译安装可以灵活地定制软件,选择自

  • 22.12.增量Java编译 从Gradle2.1开始,可以使用Java增量编译,此功能正在孵化,参见JavaCompile如何启用这个功能. 增量编译的主要目标如下: 避免在没必要编译的java编译资源上浪费时间.这意味着更快构建,尤其是在改变一些class与jar的时候,不需要再次编译那些不依赖这些class与jar的文件. 尽可能地少输出class.类不需要重新编译意味着保持输出目录不变。一

  • 问题内容: 我正在写一个简单的命令行游戏。我有很多功能,所有功能都将在这里发布。 问题:程序可以编译,但是当被调用并选择了一个数字时,我得到了: 这是我的代码: 有人可以在这里指出正确的方向吗?我究竟做错了什么?我感觉这是类“玩家”和在“游戏”类中创建的对象的类问题。 问题答案: 你得到一个因为是。您在这里做了什么: 是声明 局部 变量。静态类变量保持不变,因此保持不变。 这称为阴影(JLS,第6

  • 要知道,任何一门编程语言都有相关的组织和团体在不停的维护和更新。原因很简单,时代在发展,编程语言如果停滞不前,最终就会被淘汰。 以 C 语言为例,发展至今该编程语言已经迭代了诸多个版本,例如 C89(偶尔又称为 C90)、C94(C89 的修订版)、C99、C11、C17,以及当下正在开发的 C2X 新标准。甚至于在这些标准的基础上,GCC 编译器本身还对 C 语言的语法进行了扩展,先后产生了 G

  • 我正在尝试将十六进制转换为二进制,并接收具有以下功能的文本文件: 3c011001 34300000 8e080000 20090003 11200004 但它在同一行输出二进制文件: 0011 1100 0000 0001 0001 0000 0000 0001 0011 0100 0011 0000 0000 0000 0000 0000 1000 1110 0000 1000 0000 00

  • 问题内容: 我正在尝试反编译 Java项目(.jar)文件,并且能够从其中获取.java文件。现在如何将其编译回来?我可以将.java文件作为单个文件添加到Netbeans。但是如何将其作为项目添加并编译呢?该项目是JavaFX项目。所以请帮我。 问题答案: 有很多方法可以实现此目的,但是我认为您不能像这样直接在框内(在本例中为开箱)将项目导入jar中。 我们可以使用最基本的技术(我承认有点脏),