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 NoClassDefFoundError
indicación de que no se encuentran las bibliotecas.
Incluso intenté rehacer el archivo JAR e incluí el lib
directorio 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á
-jar
el-cp
pará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:
lib
directorio en el manifiesto (puede usar rutas relativas allí)-cp
:java -cp MyJar.jar:lib/* com.somepackage.subpackage.Main
fuente
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.jar
es el nombre completo del JAR que desea ejecutarlibs/*
es un camino a sus JAR de dependenciacom.test.App
es 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
-cp
o 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