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 etiquetado lib. Parece que no puedo obtener una respuesta directa sobre cómo ejecutar mi archivo JAR mientras especifico que debe usar lib/*como classpath.
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 la NoClassDefFoundErrorindicación de que no se encuentran las bibliotecas.
Incluso intenté rehacer el archivo JAR e incluí el libdirectorio y el contenido, pero todavía no hay dados ...
¿Cómo puedo ejecutar un archivo JAR desde la línea de comando y especificar la ruta de clase a usar?
java
shell
command-line
classpath
SnakeDoc
fuente
fuente

Respuestas:
Cuando lo especifique , se ignorará
-jarel-cpparámetro.De la documentación :
Tampoco puede "incluir" los archivos jar necesarios en otro archivo jar (necesitaría extraer su contenido y poner los archivos .class en su archivo jar)
Tienes dos opciones:
libdirectorio en el manifiesto (puede usar rutas relativas allí)-cp:java -cp MyJar.jar:lib/* com.somepackage.subpackage.Mainfuente
unzip MyJar.jar lib/*.jar. Luego, como sugieres, pueden correrjava -cp MyJar.jar:lib/* ...Ejecute un archivo jar y especifique una ruta de clase como esta:
jar_name.jares el nombre completo del JAR que desea ejecutarlibs/*es un camino a sus JAR de dependenciacom.test.Appes el nombre completo de la clase del JAR que tiene elmain(String[])métodoEl jar y el jar dependiente deben tener permisos de ejecución.
fuente
Puede hacer esto en unix shell:
Puede hacer esto en Windows PowerShell:
fuente
Alternativamente, use el manifiesto para especificar la ruta de clase y la clase principal si lo desea, por lo que no necesita usar
-cpo especificar la clase principal. En su caso, contendría líneas como esta:Desafortunadamente, debe especificar cada jar en el manifiesto (no es un gran problema, ya que 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 al lugar donde ejecuta
java -jar MyJar.jar.Entonces ejecútalo con
fuente
Puede hacer un Runtime.getRuntime.exec (comando) para reiniciar el jar, incluida la ruta de clase con args.
fuente