He intentado hacer que esto funcione por un tiempo, pero todavía no tengo suerte.Maven - Use JDK 7 para compilar para JVM 5
Quiero correr con JAVA_HOME
apuntando a JDK7 pero quiero compilar un proyecto para la JVM 5. He leído a través documentation, he encontrado similar posts en SO, pero ninguno de ellos parece funcionar en mi configuración.
intentó por primera vez con el entorno rural a sólo target
y source
pero me da un error:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.5</source>
<target>1.5</target>
</configuration>
</plugin>
[ClassName]
is not abstract and does not override abstract methodgetParentLogger()
inCommonDataSource
Por lo que he entendido que la clase se actualizó en JDK 7 y el método extra que está lanzando el error fue Recien agregado. Necesito usar el tiempo de ejecución de JDK 5 que tiene la implementación anterior y todo debería funcionar bien. Así que hacer esto:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<verbose>true</verbose>
<source>1.5</source>
<target>1.5</target>
<compilerArguments>
<bootclasspath>${env.JAVA5_HOME}/jre/lib/rt.jar</bootclasspath>
</compilerArguments>
</configuration>
</plugin>
tengo JAVA5_HOME ajustado correctamente en mi sistema, puedo ver que la carga de las clases correctas en el registro, pero golpear a otro error:
[loading ZipFileIndexFileObject[c:\Program Files\Java\jdk1.5.0_22\jre\lib\rt.jar(*.class)]]
...
...
[ClassName]
error: packagejavax.crypto
does not exist
que es justo , ya que no incluí jce.jar
(clases de criptografía) en el bootclasspath
. Sin embargo, hay algo que me desconcierta. Aunque el bootclasspath
contiene solo el tiempo de ejecución de Java 5, tengo muchas bibliotecas de JRE7 en el classpath. No están especificados en ninguna parte.
[search path for class files: c:\Program Files (x86)\Java\jdk1.5.0_22\jre\lib\rt.jar,c:\Program Files\Java\jdk1.7.0_02\jre\lib\ext\dnsns.jar,c:\Program Files\Java\jdk1.7.0_02\jre\lib\ext\localedata.jar,c:\Program Files\Java\jdk1.7.0_02\jre\lib\ext\sunec.jar,c:\Program Files\Java\jdk1.7.0_02\jre\lib\ext\sunjce_provider.jar,c:\Program Files\Java\jdk1.7.0_02\jre\lib\ext\sunmscapi.jar,c:\Program Files\Java\jdk1.7.0_02\jre\lib\ext\zipfs.jar, ...]
Si trato y añadir jce.jar (de JRE5), regrese al primer error:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<verbose>true</verbose>
<source>1.5</source>
<target>1.5</target>
<compilerArguments>
<bootclasspath>${env.JAVA5_HOME}/jre/lib/rt.jar${path.separator}${env.JAVA5_HOME}/jre/lib/jce.jar</bootclasspath>
</compilerArguments>
</configuration>
</plugin>
The type [ClassName] must implement the inherited abstract method CommonDataSource.getParentLogger()
También veo ningún rastro de rt.jar
está cargando, pero no obtienes un error de java.lang
no encontrado, por lo que hay algunas clases cargadas en el classpath.
Lo arreglaré temporalmente haciendo un script por lotes que sobrescriba JAVA_HOME
antes de compilarlo y lo vuelva a configurar posteriormente, pero realmente quiero que se haga de la manera correcta. Esto no parece un caso de uso tan extremo. :)
¿Qué estoy haciendo mal aquí?
Eche un vistazo a mis ejemplos, lo estoy usando de esa manera, pero no funciona si especifico varios contenedores. ¿Me estoy perdiendo de algo? –