test example compiler java cross-compiling javac

example - Javac Cross-Compilation con 1.7



javac windows (2)

Este es un límite en javac. Tenga en cuenta que podría salirse con la suya con solo especificar "-get" (y no -source) en versiones anteriores de javac. Es posible que todavía puedas.

Es posible que desee considerar el uso del Compilador Java Eclipse (ecj), que está disponible como compilador independiente, como un complemento de Maven y que también puede ser utilizado por la tarea javac en los scripts ant.

Consulte http://help.eclipse.org/indigo/topic/org.eclipse.jdt.doc.user/tasks/task-using_batch_compiler.htm para obtener más información.

Así que chicos,

Estoy intentando jugar un poco con la compilación de Javac Cross con Ant y en el terminal. Localmente y en un entorno de integración y tengo el mismo problema en el problema muy básico.

Ejecuto esto en el terminal de Linux (y también en mi cygwin en windows y el cmd):

javac -target 1.6 -source 1.7 -bootclasspath /usr/java/jdk1.6.0_27/jre/lib/rt.jar Main.java

con Main.java con nada más que un System.out.println.

javac -version ==> javac 1.7.0_11

Me aparece el mensaje de error:

javac: source release 1.7 requires target release 1.7

Tengo aproximadamente la misma configuración en mi máquina con Windows local con los mismos resultados exactos.

Según mi entendimiento, la compilación cruzada consiste en compilar algún código fuente que sea compatible con una versión superior jdk usando esa versión superior de jdk, pero pasando el rt.jar de la versión de destino que supuestamente es más baja.

Si el objetivo y la fuente son los mismos, funcionó.

target=1.7 and source=1.7 workd fine target=1.6 and source=1.6 worked just fine

pero quiero una compilación cruzada, entonces, ¿qué es lo que estoy haciendo mal?

Aprecio toda la ayuda que pude obtener y gracias de antemano.


No puede tener una versión más nueva de origen y una versión más baja de destino. Por ejemplo, en Java 5, se agregaron varias características nuevas al lenguaje, como genéricos, autoboxing y no puede esperar que un JVM 1.4 lo entienda. Por lo tanto, debe decirle al compilador que su código fuente es Java 1.4. Esto explica los resultados que tiene.

El valor predeterminado para -target depende del valor de -source:

  • Si no se especifica -source, el valor de -target es 1.7
  • Si -source es 1.2, el valor de -get es 1.4
  • Si -source es 1.3, el valor de -target es 1.4
  • Si -source es 1.5, el valor de -target es 1.7
  • Si -source es 1.6, el valor de -target es 1.7
  • Para todos los demás valores de -source, el valor de -target es el valor de -source.

Para obtener más información, consulte http://docs.oracle.com/javase/7/docs/technotes/tools/windows/javac.html