Investigamos en distintos espacios y así de esta forma traerte la solución para tu dilema, en caso de dificultades puedes dejarnos tu pregunta y te contestamos porque estamos para servirte.
Solución:
Prefiero la primera versión para iniciar una aplicación Java solo porque tiene menos trampas (“bienvenido al infierno de classpath”). El segundo requiere un archivo jar ejecutable y el classpath para esa aplicación debe definirse dentro del manifiesto del jar (todas las demás declaraciones de classpath se ignorarán silenciosamente…). Entonces, con la segunda versión, tendría que buscar en el contenedor, leer el manifiesto e intentar averiguar si las entradas de classpath son válidas desde donde se almacena el contenedor… Eso es evitable.
No espero ninguna ventaja o desventaja de rendimiento para ninguna de las versiones. Solo le dice al jvm qué clase usar para el hilo principal y dónde puede encontrar las bibliotecas.
Con el -cp
argumento proporciona el classpath, es decir, la(s) ruta(s) a clases o bibliotecas adicionales que su programa puede requerir cuando se compila o ejecuta. Con -jar
usted especifica el archivo JAR ejecutable que desea ejecutar.
No puedes especificarlos a ambos. Si intentas correr java -cp folder/myexternallibrary.jar -jar myprogram.jar
entonces realmente no funcionará. El classpath para ese JAR debe especificarse en su Manifiesto, no como un -cp
argumento.
Puedes encontrar más sobre esto aquí y aquí.
PD: -cp
y -classpath
son sinónimos.
Cuando usas java -cp
debe proporcionar un nombre de clase principal completamente calificado, por ejemplo
java -cp com.mycompany.MyMain
Cuando usas java -jar myjar.jar
su archivo jar debe proporcionar la información sobre la clase principal a través de manifest.mf contenida en el archivo jar en la carpeta META-INF
:
Main-Class: com.mycompany.MyMain
Te mostramos comentarios y valoraciones
Tienes la posibilidad comunicar este artículo si te fue de ayuda.