Почему javac перекомпилирует мой .java, хотя .class уже обновлен? - PullRequest
2 голосов
/ 25 ноября 2011

Мне сказали, что javac достаточно умен, чтобы не перекомпилировать .java, при условии, что у этого .java есть временная метка до .class. Я просто нахожу, что это не работает в моей машине, я конечно где-то ошибаюсь?

my P.java находится под .../eg/access, а P.java объявлен как пакет доступа

eg 
 |- access 
      |- P.class
      |- P.java

Затем, когда я запускаю javac P.java, каждый раз, когда перекомпилируется , это нормально или я ошибаюсь?

Ответы [ 3 ]

7 голосов
/ 25 ноября 2011

Javac по умолчанию перекомпилирует все каждый раз.Поведение, которое вы наблюдаете, правильное и в соответствии с дизайном.

Похоже, что вы можете указать опцию для этого поведения, хотя:

-Xprefer: {newer, source}

Укажите, какой файл нужно прочитать, когда для типа будут найдены как исходный файл, так и файл класса.(См. Поиск типов).Если используется -Xprefer: более новый , он считывает более новый файл источника или класса для типа (по умолчанию).Если используется параметр -Xprefer: source , он считывает исходный файл.Используйте -Xprefer: source , когда вы хотите быть уверены, что любые процессоры аннотаций могут получать доступ к аннотациям, объявленным с политикой хранения SOURCE.

Взят с: http://docs.oracle.com/javase/6/docs/technotes/tools/windows/javac.html

Возможно, вы также думаете о компиляторе Eclipse, который, я уверен, выполняет инкрементную компиляцию, или о задаче javac в ant, которая достаточно умна, чтобы выяснять такие случаи.

5 голосов
/ 25 ноября 2011

Это нормально, что каждый раз перекомпилируется.javac не выполняет пошаговую компиляцию.

2 голосов
/ 25 ноября 2011

Я думаю, вы, возможно, путаете javac как исполняемый файл командной строки с задачей javac в Apache Ant .javac всегда перекомпилирует исходный файл, независимо от того, является ли он старше или новее двоичного файла.Ant достаточно умен, чтобы понять, когда файл должен быть перекомпилирован, но, конечно, вам нужно использовать систему сборки Ant, чтобы использовать эту функцию.

...