¿Cuál es la diferencia entre javac y el compilador de Eclipse?
¿Es el compilador Java de Eclipse solo un contenedor alrededor del mismo núcleo en el que javac
está incluido el programa, o es un compilador completamente separado? Si es lo último, ¿por qué reinventarían la rueda?
Eclipse ha implementado su propio compilador llamado Eclipse Compiler for Java (ECJ).
Es diferente de javac, el compilador que se incluye con Sun JDK. Una diferencia notable es que el compilador de Eclipse le permite ejecutar código que en realidad no se compiló correctamente. Si el bloque de código con el error nunca se ejecuta, su programa funcionará bien. De lo contrario, generará una excepción que indica que intentó ejecutar código que no se compila.
Otra diferencia es que el compilador de Eclipse permite compilaciones incrementales desde el IDE de Eclipse, es decir, todo el código se compila tan pronto como termina de escribir.
El hecho de que Eclipse venga con su propio compilador también es evidente porque puedes escribir, compilar y ejecutar código Java en Eclipse sin siquiera instalar el SDK de Java.
Algunos ejemplos en los que se prefiere el TJCE a javac son:
- Apache Tomcat utiliza ECJ para compilar JSP,
- IntelliJ IDEA tiene soporte para ECJ, a partir de GNU Compiler for Java (GCJ) 4.3,
- El GCJ se integra con el TJCE,
- Liferay construye con el TJCE.
Todos ya han explicado que son diferentes. Aquí hay algunas diferencias en los comportamientos que he notado entre los dos compiladores. Todos se reducen a un error en (al menos) una de las implementaciones.
Relacionado con la optimización en tiempo de compilación
- ¿Error del eclipse? Activar un valor nulo con solo el caso predeterminado
Inferencia de tipos genéricos relacionados
- Generics compila y se ejecuta en Eclipse, pero no compila en javac
- Los compiladores se comportan de manera diferente con un parámetro nulo de un método genérico
El compilador integrado de Eclipse se basa en el compilador Java Jikes de IBM . (Tenga en cuenta que Eclipse también comenzó su vida en IBM). Es completamente independiente del compilador Java de Sun en el JDK; no es una envoltura alrededor de javac
Sun.
Jikes existe desde hace mucho tiempo, solía ser mucho más rápido que el compilador JDK Java estándar (pero no sé si eso sigue siendo cierto). En cuanto a por qué IBM quería escribir su propio compilador de Java: tal vez por motivos de licencia (también tienen su propia implementación de Java).
Es un compilador completamente separado. Esto es necesario ya que javac no permite la compilación de código ligeramente roto desde el sitio de eclipse.
Un compilador incremental de Java. Implementado como un constructor de Eclipse, se basa en la tecnología desarrollada a partir del compilador VisualAge para Java. En particular, permite ejecutar y depurar código que aún contiene errores sin resolver.