В чем разница между 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. В частности, он позволяет запускать и отлаживать код, который все еще содержит неразрешенные ошибки.