with java shell command-line classpath

java execute jar with libraries



Ejecute un archivo JAR desde la lĂ­nea de comando y especifique classpath (4)

Alternativamente, use el manifiesto para especificar el class-path y main-class si lo desea, de modo que no necesita usar -cp o especificar la clase principal. En su caso, contendría líneas como esta:

Main-Class: com.test.App Class-Path: lib/one.jar lib/two.jar

Desafortunadamente, necesita deletrear cada jar en el manifiesto (no es tan grave como solo lo hace una vez, y puede usar un script para compilar el archivo o usar una herramienta de compilación como ANT o Maven o Gradle). Y la referencia tiene que ser un directorio relativo o absoluto donde ejecuta java -jar MyJar.jar .

Luego ejecútelo con

java -jar MyJar.jar

He compilado un archivo JAR y he especificado la clase principal en el manifiesto (utilicé la función de exportación de Eclipse). Mis dependencias están todas en un directorio llamado lib . Parece que no puedo obtener una respuesta directa sobre cómo ejecutar mi archivo JAR mientras especifico que debería usar lib/* como ruta de clase.

He intentado:

]$ java -jar -cp .:lib/* MyJar.jar ]$ java -cp .:lib/* -jar MyJar.jar ]$ java -cp .:lib/* com.somepackage.subpackage.Main

etc ...

Cada uno da un error que dice:

Error: Could not find or load main class ....

o da el NoClassDefFoundError indica que las bibliotecas no se encuentran.

Incluso probé a rehacer el archivo JAR e lib directorio y contenido de lib , pero aún no había dado ...

¿Cómo puedo ejecutar un archivo JAR desde la línea de comando y especificar el classpath que debo usar?


Cuando especifica -jar entonces el parámetro -cp será ignorado.

De la documentación :

Cuando utiliza esta opción, el archivo JAR es el origen de todas las clases de usuario y se ignoran otras configuraciones de ruta de clase de usuario.

Tampoco puede "incluir" archivos jar necesarios en otro archivo jar (deberá extraer sus contenidos y colocar los archivos .class en su archivo jar)

Tienes dos opciones:

  1. incluir todos los archivos jar del directorio lib en el manifiesto (puede usar rutas relativas allí)
  2. Especifique todo ( incluido su jar) en la línea de comandos usando -cp :
    java -cp MyJar.jar:lib/* com.somepackage.subpackage.Main

Ejecute un archivo jar y especifique una ruta de clases como esta:

java -cp <jar_name.jar:libs/*> com.test.App

jar_name.jar es el nombre completo del JAR que quieres ejecutar

libs/* es una ruta a sus JAR de dependencia

com.test.App es el nombre completo de la clase del JAR que tiene el método main(String[])

El jar y el jar dependiente deberían tener permisos de ejecución.


Puedes hacer esto en shell de Unix:

java -cp MyJar.jar:lib/* com.somepackage.subpackage.Main

Puede hacer esto en Windows PowerShell:

java -cp "MyJar.jar;lib/*" com.somepackage.subpackage.Main