В чем разница между javac и компилятором Eclipse?

Является ли Java-компилятор Eclipse просто оберткой вокруг того же ядра, что и javac программа обернута или это отдельный компилятор? Если последнее, зачем им изобретать велосипед?

4 ответа

Решение

В Eclipse реализован собственный компилятор под названием Eclipse Compiler for Java (ECJ).

Он отличается от javac, компилятора, поставляемого с Sun JDK. Одно заметное отличие состоит в том, что компилятор Eclipse позволяет запускать код, который на самом деле не компилировался должным образом. Если блок кода с ошибкой никогда не запускается, ваша программа будет работать нормально. В противном случае он выдаст исключение, указывающее, что вы пытались запустить код, который не компилируется.

Другое отличие состоит в том, что компилятор Eclipse допускает инкрементные сборки из Eclipse IDE, то есть весь код компилируется, как только вы закончите вводить текст.

Тот факт, что Eclipse поставляется с собственным компилятором, также очевиден, поскольку вы можете писать, компилировать и запускать код Java в Eclipse, даже не устанавливая Java SDK.

Вот несколько примеров, где ECJ предпочтительнее javac:

  • Apache Tomcat использует ECJ для компиляции JSP,
  • IntelliJ IDEA поддерживает ECJ, начиная с GNU Compiler for Java (GCJ) 4.3,
  • GCJ интегрируется с ECJ,
  • Liferay строится с помощью ECJ.

Все уже объяснили, что они разные. Вот некоторые различия в поведении, которые я заметил между двумя компиляторами. Все они сводятся к ошибке (по крайней мере) в одной из реализаций.

Оптимизация во время компиляции

Родовой тип, связанный с выводом

Встроенный компилятор Eclipse основан на Java-компиляторе Jikes IBM. (Обратите внимание, что Eclipse также начал свою жизнь в IBM). Он полностью независим от Java-компилятора Sun в JDK; это не обертка вокруг Солнца javac,

Jikes существует уже давно, раньше он был намного быстрее, чем стандартный Java-компилятор JDK (но я не знаю, так ли это до сих пор). Что касается того, почему IBM хотела написать свой собственный компилятор Java: возможно, по причинам лицензирования (у них также есть своя собственная реализация Java).

Это отдельный компилятор. Это необходимо, поскольку javac не позволяет компилировать слегка испорченный код с сайта Eclipse.

Инкрементный компилятор Java. Реализованный как Eclipse-компоновщик, он основан на технологии, разработанной на основе VisualAge для компилятора Java. В частности, он позволяет запускать и отлаживать код, который все еще содержит неразрешенные ошибки.

Другие вопросы по тегам