Esto es principalmente útil para producir un archivo jar que funcione con una versión anterior de Java. Creo que, hasta ahora, todos los JDK también pueden ejecutar versiones anteriores, por lo que no existe un motivo real para tener un objetivo más grande que la fuente.
Sin embargo, tiene sentido establecer target
a, p. Ej. 1.6 cuando se usa un 1.7 JDK.
no estoy seguro, pero creo que podría funcionar en algunas situaciones para compilar un código java 1.7 utilizando un compilador 1,7 a un frasco de 1,6, por ejemplo expresiones tales como
ArrayList<Integer> foo = new ArrayList<>();
que sólo son válidos en la versión de origen 1.7+ debe compilarse a un código de bytes compatible de 1.6. Pero no he verificado si el compilador realmente hará esto. Desafortunadamente, esto no parece implementarse en la práctica.
Tenga en cuenta que he encontrado que 'javac' no admite todas las combinaciones. También tengo un caso de uso. En Java 6 JAX-WS está integrado, por lo que quería tener una solución que funcione en Java 6 sin bibliotecas adicionales. Esa solución luego era necesaria para que unos pocos clientes fueran ejecutables en una Java 5 JVM (y JAX-WS incorporada en el lado) y la sintaxis '@ Override' cambió para que no fuera compilable inmediatamente por Java 5 javac. (Esto fue pre-maven, podría ser más fácil hacerlo hoy en día) –
Véase también '-bootclasspath' como se describe más adelante en [esta respuesta] (http://stackoverflow.com/a/10663478/418556). –
@skaffman - * "La razón por la que harías esto es otra cosa ..." * - Java intenta interpretar los comentarios. Si los idiomas no están configurados correctamente, la compilación podría fallar debido a un carácter ilegal en los comentarios. A veces es más fácil decirle al compilador que deje de interpretar los comentarios y, por ejemplo, corrige el aviso de copyright en cientos de archivos. – jww