【问题标题】:Does javac always compile the .java file to .class file at each time being called?javac 是否总是在每次调用时将 .java 文件编译为 .class 文件?
【发布时间】:2018-09-16 20:20:47
【问题描述】:

使用 GNU Make 时,如果源文件不比已存在的目标文件更新,则不会再次编译源文件。我想知道这是否也是javac的行为?还是javac会一直编译源文件而不检查现有的类文件?

【问题讨论】:

  • 您正在比较不同类别的工具。合适的比较是在 javac 和 cc 之间,或者在 Make 和 Maven 或 Gradle 之间(两者都会跳过编译未修改的文件)。
  • @chrylis 哦,是的!谢谢你告诉我!

标签: java makefile gnu-make javac


【解决方案1】:

第一次编译:

一分钟后编译(不修改Test.java):

可以看到,在不修改Test.java的情况下编译时Test.class的修改日期发生了变化。

【讨论】:

    【解决方案2】:

    她在这里:-

     javac  myclass.java
    

    每次编译文件时,它都会创建一个新的 myclass.class 文件。但是像mavan 这样的工具首先检查原始java文件是否已被更改/修改。如果不是,它不会要求javac 再次编译它,否则它将编译该文件。因此,在mavan 之类的工具或eclipse 之类的工具中,我们必须要求一个干净的构建来编译所有java 文件,否则它将指示javac 只编译修改过的java 文件。

    【讨论】:

      【解决方案3】:

      如果你在做一个 javac *.java 它总是会重新编译你当前目录中的 java 文件,或者 javac Test.java 总是会编译一个文件。

      但是,如果Test.java依赖于其他java文件,它们会被编译成类但规则不同!

      只有在源文件的日期较新时才会编译它们(而且我确信还有其他我没有想到的情况)

      也许这是您观察到的行为?

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-11-27
        • 1970-01-01
        • 1970-01-01
        • 2020-03-01
        • 1970-01-01
        • 2012-02-26
        • 1970-01-01
        相关资源
        最近更新 更多