¿Cómo usar clases de archivos .jar?


134

Leí los tutoriales de Java en Sun para archivos JAR, pero todavía no puedo encontrar una solución para mi problema. Necesito usar una clase de un archivo jar llamado jtwitter.jar, descargué el archivo e intenté ejecutarlo (ayer descubrí que los archivos .jar se pueden ejecutar haciendo doble clic en ellos) y Vista me dio un error que decía " Error al cargar el atributo Manifiesto de clase principal desde [ruta] /jtwitter.jar ".

El tipo que codificó el archivo .jar quiere que lo importe, pero ¿dónde guardo el archivo .jar para importarlo en mi código? Intenté poner el archivo .jar y mi archivo .java en el mismo directorio, no funcionó.

El archivo para el que intento trabajar está aquí: http://www.winterwell.com/software/jtwitter.php

Estoy usando JCreator LE.


13
¿Por qué hay un voto negativo? ¡En mi opinión, es una buena pregunta y hay información interesante en las respuestas! (+1)
guerda

Respuestas:


34

No todos los archivos jar son ejecutables.

Ahora, debe importar las clases, que están debajo del jar, en su archivo java. Por ejemplo,

import org.xml.sax.SAXException;

Si está trabajando en un IDE, debe consultar su documentación. O al menos especifique cuál está usando aquí en este hilo. Definitivamente nos permitiría ayudarlo más.

Y si no está utilizando ningún IDE, mire la opción javac -cp . Sin embargo, es una idea mucho mejor empaquetar su programa en un jararchivo e incluir todos los correos jarelectrónicos necesarios . Luego, para ejecutar su jar, como,

java -jar my_program.jar

deberías tener un META-INF/MANIFEST.MFarchivo en tu jar. Vea aquí , cómo hacerlo.


viejo, lo sé, pero en realidad no hay necesidad de importnada: solo evita tener que escribir el nombre de clase completamente calificado de quien sea que se use la clase, permitiendo solo el nombre de clase simple ( SAXException), algo así como importar el espacio de nombres
user85421

173

Digamos que necesitamos usar la clase Classnameque está contenida en el archivo jarorg.example.jar

Y su fuente está en el archivo mysource.javaAsí:

import org.example.Classname;

public class mysource {
    public static void main(String[] argv) {
    ......
   }
}

Primero, como puede ver, en su código debe importar las clases. Para hacer eso necesitasimport org.example.Classname;

En segundo lugar, cuando compila la fuente, debe hacer referencia al archivo jar.

Tenga en cuenta la diferencia en el uso :y ;al compilar

  • Si está bajo un sistema operativo similar a Unix:

    javac -cp '.:org.example.jar' mysource.java
  • Si estás debajo de Windows:

    javac -cp .;org.example.jar mysource.java

Después de esto, obtienes el archivo bytecode mysource.class

Ahora puedes ejecutar esto:

  • Si está bajo un sistema operativo similar a Unix:

    java -cp '.:org.example.jar' mysource
  • Si estás debajo de Windows:

    java -cp .;org.example.jar mysource

44
¿Podría explicar esta notación un poco más? Esto solucionó mi problema, pero desafortunadamente NO TENGO IDEA de lo que significa el punto y coma / dos puntos en este caso particular.
cementar el

2
Esta historia de punto y coma / colon me costó todo el día. Al menos lo encontré ahora, ¡gracias!
Maxim Zubarev

1
@ChaseMeadors El punto y coma / dos puntos significa esencialmente "y" aquí. Se está separando .de org.example.jar.
duozmo

Si está hojeando, preste atención a la distinción de la mayoría de las *PATHvariables: los archivos .jar deben nombrarse individualmente .
duozmo

15

Necesita agregar el archivo jar en el classpath. Para compilar tu clase de Java:

javac -cp .;jwitter.jar MyClass.java

Para ejecutar su código (siempre que MyClass contenga un método principal):

java -cp .;jwitter.jar MyClass

Puede tener el archivo jar en cualquier lugar. Lo anterior funciona si el archivo jar está en el mismo directorio que su archivo java.


7

Debe poner el archivo .jar en su classpath cuando compila / ejecuta su código. Luego, solo usa las importaciones estándar de las clases en .jar.


6

Como dice workmad3, necesitas que el archivo jar esté en tu classpath. Si está compilando desde la línea de comandos, eso significará usar el indicador -classpath. (Evite la variable de entorno CLASSPATH; es un dolor en el cuello IMO).

Si está utilizando un IDE, háganos saber cuál y podemos ayudarlo con los pasos específicos de ese IDE.


La variable classpath env es útil si está utilizando scripts o algo así como firedaemon para ejecutar su aplicación. Es solo un dolor cuando lo usas globalmente :)
workmad3

Todavía me gusta verlo explícitamente.
Jon Skeet el

Estoy de acuerdo, me gusta verlo explícitamente.
J3r3myK
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.