Ejecutar clase en archivo Jar

176

Si tiene un archivo jar llamado myJar.jarubicado en / myfolder y desea usar la clase llamada myClassdesde él, ¿cómo lo hace desde la línea de comandos?

Pensé que sería ir al directorio y decir, java -cp myJar.jar.myClasspero eso no funciona. Cualquier ayuda sería apreciada.

jim
fuente
java -cp myJar.jar myClassfunciona bien para mí, ¿tienes un período espurio en tu línea de comando en lugar de un espacio?
Chris Dodd
1
¿Qué quieres decir cuando dices que quieres 'usar' esa clase? ¿Hay algún método principal al que quieras llamar en particular?
Marsellus Wallace

Respuestas:

256

Uso java -cp myjar.jar com.mypackage.myClass.

  1. Si la clase no está en un paquete, simplemente java -cp myjar.jar myClass.

  2. Si no está dentro del directorio donde myJar.jarse encuentra, puede hacer lo siguiente:

    1. En plataformas Unix o Linux:

      java -cp /location_of_jar/myjar.jar com.mypackage.myClass

    2. En Windows:

      java -cp c:\location_of_jar\myjar.jar com.mypackage.myClass

Mapa de bits
fuente
10
Simplemente agregue a él: en caso de que com.mypackage.myClass (en el ejemplo anterior) tenga dependencias en otros frascos, ejecútelo de la siguiente manera: java -cp dependenfile1.jar; dependenfile2.jar; c: \ location_of_jar \ myjar.jar com. mypackage.myClass
akjain
2
Una posible ruta de falla a tener en cuenta en caso de que esto no funcione: asegúrese de que su ruta totalmente calificada a su clase coincida exactamente con lo que está en su archivo jar. Si descomprime -l /location-of-jar/myjar.jar y ve algo que no sea com / mypackage / myClass, este es su problema. (Por ejemplo, si ve bin / com / mypackage / myClass, debería haber ingresado a bin para construir su archivo jar; lo que tiene no funcionará.)
Scott C Wilson
use MyClass, no myClass
Breno Inojosa
Al intentar lo anterior, obtengo la excepción de error en el hilo "main" java.lang.NoClassDefFoundError: cucumber / api / cli / Main en com.company.project.demo.bdd.runner.Execute.main (Execute.java:20 ) Causado por: java.lang.ClassNotFoundException: cucumber.api.cli.Main en java.net.URLClassLoader.findClass (fuente desconocida) en java.lang.ClassLoader.loadClass (fuente desconocida) en sun.misc.Launcher $ AppClassLoader. loadClass (Fuente desconocida) en java.lang.ClassLoader.loadClass (Fuente desconocida) ... 1 más
Vaibhav_Sharma
24

Usted quiere:

java -cp myJar.jar myClass

La documentación da el siguiente ejemplo:

C:> java -classpath C:\java\MyClasses\myclasses.jar utility.myapp.Cool
Richard Campbell
fuente
18

Hay dos tipos de archivos JAR disponibles en Java:

  1. Archivo jar ejecutable / ejecutable que contiene el archivo de manifiesto. Para ejecutar un jar Runnable puede usar java -jar fileName.jarojava -jar -classpath abc.jar fileName.jar

  2. Archivo jar simple que no contiene un archivo de manifiesto, por lo que simplemente ejecuta su clase principal dando su ruta java -cp ./fileName.jar MainClass

Gaurav Singh
fuente
6

Suponiendo que está en el directorio donde myJar.jarestá el archivo y que myClasstiene un public static void main()método:

Utiliza la siguiente línea de comando:

java -cp ./myJar.jar myClass

Dónde:

  1. myJar.jarestá en la ruta actual , tenga en cuenta que .no está en la ruta actual en la mayoría de los sistemas. Una ruta de acceso completa se prefiere aquí también.

  2. myClasses una ruta de paquete totalmente calificada a la clase, el ejemplo asume que myClassestá en el paquete predeterminado, lo cual es una mala práctica, si está en un paquete anidado lo estaría com.mycompany.mycode.myClass.


fuente
1

Esta es la forma correcta de ejecutar un .jar, y cualquiera que sea la clase que .jardebería tener main()y los siguientes son los parámetros para ello:

java -DLB="uk" -DType="CLIENT_IND" -jar com.fbi.rrm.rrm-batchy-1.5.jar
ubersucks
fuente