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

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

Ответ 1

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.

Ответ 2

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

Связанная с компиляцией оптимизация времени

Связанный с назначением тип дженериков

Ответ 3

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

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

Ответ 4

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

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