¿Cuál es la diferencia entre javac y el compilador de Eclipse?

6 minutos de lectura

¿Cual es la diferencia entre javac y el compilador de
Bart van Heukelom

¿Es el compilador de Java de Eclipse solo un envoltorio del mismo núcleo que el javac programa está envuelto, o es un compilador separado por completo? Si es lo último, ¿por qué reinventarían la rueda?

¿Cual es la diferencia entre javac y el compilador de
jjnguy

Eclipse ha implementado su propio compilador llamado como Compilador de Eclipse para Java (TJE).

Es diferente de javac, el compilador que se envía 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, arrojará una excepción que indica que intentó ejecutar un 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 puede escribir, compilar y ejecutar código Java en Eclipse sin siquiera instalar el SDK de Java.

Algunos ejemplos en los que se prefiere ECJ sobre javac son:

  • @Bart, el compilador de Eclipse funciona lo suficientemente bien para compilaciones de lanzamiento empresarial.

    – jjnguy

    17 de junio de 2010 a las 12:51

  • @jinguy No estoy de acuerdo con que deba usar el compilador Eclipse para los lanzamientos. Como indicó en la respuesta, puede compilar código con errores, no quiere cosas como public void foo() { throw new Error (“Problema de compilación no resuelto: \n\tFOOBAR no se puede resolver\n”); } para que aparezca en mi código de producción.

    – Mateo Farwell

    28 de septiembre de 2011 a las 13:18

  • @Matthew Farwell No dijo que deberías, pero que puedes. Y si alguna vez crea una compilación con errores, entonces algo está mal con su proceso de compilación en primer lugar.

    – Stefan

    14 de noviembre de 2011 a las 22:28

  • Tenga en cuenta que incrustar ECJ en su aplicación permite que su programa se ejecute bajo un JRE en lugar de requerir un JDK.

    – Thorbjorn Ravn Andersen

    4 de junio de 2015 a las 8:07

  • @MatthewFarwell para cerrar un ciclo aquí: para versiones de lanzamiento, se recomienda simplemente no especificar el argumento del compilador -proceedOnError y simplemente no producirá archivos .class desde la fuente con errores.

    – Stephan Hermann

    01/08/2015 a las 19:58

1646758453 8 ¿Cual es la diferencia entre javac y el compilador de
poligenelubricantes

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 del tiempo de compilación

  • error del eclipse? Activar un nulo con solo el caso predeterminado

Relacionado con la inferencia de tipos genéricos

  • 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

  • En realidad, me di cuenta de esta diferencia después de una larga noche: Eclipse estaba informando un error sobre algo que me parecía legal (no recuerdo qué), en mi desesperación (apenas podía mantenerme despierto) simplemente alimenté el código a javac y entonces funcionó sin problemas! Descubrí en Google que tenía que actualizar el JDT para solucionar ese problema.

    –Abel Morelos

    18 de junio de 2010 a las 15:18

  • He encontrado una serie de diferencias entre los compiladores que manejan genéricos en casos difíciles. Aquí hay dos preguntas sobre las que hice aquí en caso de que desee agregarlas a su respuesta: stackoverflow.com/questions/13501836/… stackoverflow.com/questions/13980552/…

    – Elías Vasylenko

    18 de marzo de 2013 a las 10:13

  • Las clases anónimas nunca son estáticas según JLS, pero se pueden declarar en un ámbito estático. Cuando se usa la reflexión para preguntar si dicha clase es estática, el código generado por ECJ dice que no, mientras que el de javac dice que si. Publicación relacionada aquí.

    – Pablo Bellora

    18/04/2013 a las 14:30

  • Cualquier diferencia semántica en el bytecode emitido es un error en cualquiera de las implementaciones. Esto no es muy interesante en mi opinión. Puedo producir fácilmente una larga lista de tales “diferencias” simplemente enumerando los errores abiertos de javac y ecj.

    – aioobe

    17/10/2014 a las 19:37

  • FYI, Netbeans no sufre de tales “diferencias” ya que usa la API interna de javac para hacer todo lo que hace EJC.

    -Aleksandr Dubinsky

    19 mayo 2015 a las 13:16

El compilador integrado de Eclipse se basa en el de IBM. Jikes compilador java. (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 un envoltorio alrededor de Sun javac.

Jikes existe desde hace mucho tiempo, solía ser mucho más rápido que el compilador Java JDK 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 razones de licencia (también tienen su propia implementación de Java).

  • ellos no De Verdad escribir su propio compilador de Java. Eclipse tiene un largo linaje que se remonta a Visual Age para Smalltalk, incluso antes de que Java existiera. Dado que los dos idiomas son en realidad algo similares, simplemente adaptaron su tecnología existente. El compilador de Sun tampoco es adecuado para su uso en un IDE, especialmente en un IDE de estilo Smalltalk incremental como el Visual Age para Java original, ya que siempre quiere compilar archivos completos. El compilador de IBM puede compilar incrementalmente solo los fragmentos que han cambiado. Incluso puede compilar fragmentos que ni siquiera son Java legales, que se utilizan en el

    – Jörg W. Mittag

    17 de junio de 2010 a las 14:35

  • Libro de recuerdos de Eclipse donde simplemente puede escribir fragmentos de código, resaltarlos y ejecutarlos, sin tener que ponerlos en una clase, un método principal o incluso en un método en absoluto.

    – Jörg W. Mittag

    17 de junio de 2010 a las 14:36

  • @JörgWMittag En realidad, la API interna de javac (como la usa Netbeans) se puede usar para lograr los mismos objetivos.

    -Aleksandr Dubinsky

    19 mayo 2015 a las 13:15

  • @AleksandrDubinsky: ¿Qué tan bien funcionó eso en 1997, cuando se lanzó Visual Age para Java?

    – Jörg W. Mittag

    3 de febrero de 2019 a las 10:22

1646758455 474 ¿Cual es la diferencia entre javac y el compilador de
Ben M

Es un compilador separado por completo. Esto es necesario ya que javac no permite la compilación de código ligeramente roto, desde el sitio del 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.

¿Ha sido útil esta solución?

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Configurar y más información
Privacidad