Компилятор командной строки javac
скомпилирует каждый исходный файл, указанный в командной строке, и дополнительно все, от чего они зависят, если у них нет новых файлов классов.
Муравей javac
Задача старается быть немного умнее, чтобы избежать компиляции всегда всего - она перекомпилирует только те файлы, которые изменились (т.е. являются более новыми, чем их соответствующие файлы классов).Это не обращает внимания на случай, когда, возможно, изменилась зависимость какого-либо класса, и, следовательно, другие классы также должны быть перекомпилированы.
В моем текущем проекте я просто делаю ant clean
всякий раз, когда у меня возникают проблемы с тестами(и, конечно, перед любым производственным развертыванием), который удаляет все файлы классов.Но, как сказал Ванза, есть задача depend
, задача которой состоит в том, чтобы найти и удалить все классы, которые зависят от ваших измененных классов - запустите эту задачу перед задачей javac
, и у вас все получится.