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.


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


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


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


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.


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
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.