2012-09-18 38 views
9

He descargado dos jarras. Quiero importar algunas de sus clases contenidas. ¿Cómo hago esto?¿Cómo importo jar a mi programa java?

Es para mi clase de algoritmos. Intenté seguir las instrucciones en el siguiente sitio sin resultado.

http://algs4.cs.princeton.edu/code/

Hay un instalador para OSX (Estoy corriendo león de montaña) que supuestamente se suma a los tarros de la ruta de clases. Desafortunadamente también instala al Dr. Java. Prefiero usar Sublime y Terminal. Supuse que sería bastante fácil simplemente ...

import java.stdlib; 

en mi archivo Percolation.java, pero javac-ción de que el programa produce un "paquete de stdlib no existe", al igual que

import stdlib; 

he añadido la localización de stdlib.jar y algs4.jar a mi CLASSPATH Terminal manual a través de:

export CLASSPATH=$CLASSPATH:/Users/Michael/path/to/jar/algs4.jar:/Users/Michael/path/to/jar/algs4.jar 
export CLASSPATH=$CLASSPATH:/Users/Michael/path/to/jar/stdlib.jar:/Users/Michael/path/to/jar/stdlib.jar 

también he intentado

javac -cp $CLASSPATH:/Users/Michael/path/to/jar/algs4.jar:/Users/Michael/path/to/jar/stdlib.jar Percolation.java 

Pero sigo teniendo una

javac Percolation.java 
Percolation.java:1: cannot find symbol 
symbol : class stdlib 
location: package java 
import java.stdlib; 
    ^
Percolation.java:2: package java.algs4 does not exist 
import java.algs4.WeightedQuickUnionUF; 
      ^

¿Qué está pasando aquí?

También hay una manera de agregar permanentemente esos valores a mi CLASSPATH en OS X mountain lion. Tengo que realizar ese comando con cada Terminal nueva.

+0

¿Qué es 'stdlib'? ¿Qué es 'Dr. Java'? Uso un maven para importar/descargar las dependencias que necesito que ejecuto desde un IDE. No sé de ningún instalador que agregue jarras que podría querer a su ruta de clase. –

+0

@Peter Lawrey Dr. Java es un IDE, stdlib es uno de los archivos jar que descargué e intento importar a mi programa. Intenté agregar manualmente estos archivos jar a mi ruta de clase sin éxito. –

+0

Creo que está prohibido nombrar un paquete como 'java.stdlib'. En el tiempo de ejecución, se lanzará una java.lang.SecurityException.Entonces la importación probablemente sea incorrecta. – RealHowTo

Respuesta

3

Si está usando la terminal para compilar y ejecutar su programa, a continuación, en la ventana de terminal, comienzan estableciendo el CLASSPATH:

$ export CLASSPATH=$CLASSPATH:/Users/Michael/path/to/jar1.jar:/Users/Michael/path/to/jar2.jar 

Entonces se puede escribir echo $CLASSPATH y ver que se hace referencia a los frascos.

Ahora, en la misma ventana de terminal, use javac para compilar su clase. Establecer el CLASSPATH como se indica anteriormente solo se aplica a la ventana del Terminal actual y a cualquier proceso que se inicie desde ella.

Alternativamente, usted puede pasar el CLASSPATH a javac:

$ javac -cp $CLASSPATH:/Users/Michael/path/to/jar1.jar:/Users/Michael/path/to/jar2.jar MyClass.java 

de persistir esta CLASSPATH para futuras sesiones de Terminal Server, agregue la línea export arriba para el archivo .profile en su directorio personal.

+0

Gracias por la ayuda, pero estas sugerencias aún producen errores. He agregado mi pregunta. –

+0

@MichaelGruber necesita cambiar la parte/path/to para reflejar la ubicación de los archivos jar en su sistema de archivos. He usado _path/to/_ solo como marcador de posición. En la Terminal, ve a donde están los frascos y escribe 'pwd'. esto imprimirá lo que necesita poner en su 'CLASSPATH' – pb2q

+1

Sí, lo sé. echo $ CLASSPATH salidas : /Users/Michael/Dropbox/Algorithms/includes/algs4.jar: /Users/Michael/Dropbox/Algorithms/includes/algs4.jar --- Todavía obtengo los mismos errores de javac. –

0

Ejecute javac con la opción -classpath <path_to_jar>. O edite la variable de entorno CLASSPATH para que contenga el JAR con las clases que desea usar.

2

Probablemente tenga las cosas de classpath correctas. Sin embargo, la clase que intentas importar no se llama java.stdlib. Debe importar el nombre completo del paquete ... probablemente algo así como org.somecompany.ourlibrary.stdlib.Por lo tanto lo que se necesita

import org.somecompany.ourlibrary.stdlib 

en la parte superior de su archivo Percolations.java con el resto de las declaraciones de importación.

+1

Si no es solo stdlib, o java.stdlib, no estoy seguro de lo que sería ... No hay muchos consejos sobre el sitio web del que lo obtuve. –

+0

En muchos IDE, si utiliza una clase de la biblioteca que está en su ruta de clase, sugerirá y agregará una importación para esa clase. No debería necesitar saber dónde están la mayoría de sus clases en términos de paquetes. –

1

¿Su programa Percolation está incluido en su propio paquete? Si es así, intente ponerlo en el paquete predeterminado comentando las declaraciones de paquetes de sus archivos y compilando de nuevo. Además, nada en algs4 está en el paquete java, es todo lo que necesita.

3

No está actualizado para responder a esta pregunta, pero tal vez sea útil para los futuros participantes del curso de Algoritmos de Princeton. Después de agregar CLASSPATH en el entorno java, obtenga clases de los paquetes, pero aún generará errores en el comando de importación. Debe eliminar import algs4 y stdlib de los archivos fuente y la compilación se ejecutará sin problemas.

Esta solución funciona en Ubuntu 12.04 con zsh.

0

Me enfrenté al mismo problema durante el trabajo en este curso, pero para Windows. Dejaré este comentario aquí en caso de que ayude a alguien.

Si utiliza DrJava no necesita ninguna import declaraciones en el código. Si siguió los pasos de instalación descritos en el curso, todo está configurado para usted.

Pero aquí puede haber un problema: pone jar archivos en su directorio de usuario actual, cuya ruta puede contener símbolos inapropiados (letras rusas en mi caso). Debe verificarlo en Editar -> menú de Preferencias. Puede ver las rutas algs4.jar y stdlib.jar. Asegúrese de que esta ruta sea correcta y apunte a los archivos reales existentes.

Acabo de mover todos los archivos necesarios a otro directorio y cambié las rutas en este menú. Me solucionó este problema.

1

Si está utilizando Eclipse (como yo lo hago), seleccione el proyecto actual, luego abra las propiedades del proyecto desde los menús. A la izquierda, seleccione "Ruta de creación de Java" y luego seleccione las bibliotecas de pestañas. Ahora haz clic en el botón "Agregar tarros externos" y apuntas a los archivos jar, y listo.

Buena suerte.

0

Perdí un montón de tiempo importando la clase, probé la opción CL de "javac -cp.; Stdlib.jar mad.java" etc. pero solía obtener el mismo error que usted mencionó.
Luego comenté la importación por completo y me aseguré de que las preferencias de DrJava tuvieran los 2 classpaths añadidos + la variable% CLASSPATH% para tener el valor correcto. Simplemente funciona ahora ¡Buena suerte!

0

simplemente nombre el paquete por defecto, entonces funcionará bien. También después de que usted no necesita importar anyting acaba de ejecutar algún código proporcionado en

Fundamentsls

capítulo como

promedio

.

0

Mi solución fue agregar 2 nuevos sistemas de compilación a mi editor de texto Sublime: uno para compilar y el otro para ejecutar. Utilice Herramientas> Build_system-> New_build_system ... del menú principal con estos fragmentos de dos códigos:

para la compilación (He nombrado el archivo "algs-compile.sublime_build"):

{ 
    "cmd": ["javac", "-cp", "/Users/admin/algs4/stdlib.jar:/Users/admin/algs4/algs4.jar:.", "$file"], 
    "file_regex": "^(...*?):([0-9]*):?([0-9]*)", 
    "selector": "source.java" 
} 

de correr ("algs-run.sublime_build")

{ 
    "cmd": ["java", "-cp", "/Users/admin/algs4/stdlib.jar:/Users/admin/algs4/algs4.jar:.", "$file_base_name"] 
} 

no se olvide de reemplazar los caminos a los archivos jAR-aquí con los correctos de su sistema. Entiendo que esta pregunta es bastante antigua, pero espero que esto ayude a alguien.

0

Si usted está recibiendo el "no se puede resolver a un tipo de" error y ha intentado añadir el stdlib.jar o archivos algs4.jar, aquí está la solución:

Las bibliotecas en stdlib.jar y algs4 .jar están en el paquete "predeterminado". En Java, no puede acceder a clases en el paquete predeterminado desde un paquete nombrado. Si necesita utilizar las bibliotecas con un paquete con nombre, puede usar estas versiones de paquete:

stdlib-package.jar y algs4-package.jar.

Puede descargar estos archivos aquí: http://algs4.cs.princeton.edu/code/

continuación, puede añadir automáticamente la importación: importación edu.princeton.cs.algs4.ClassName

0

abrir su Sublime

elegir las herramientas -> Build System-> New Build System

Agregue el código siguiente al nuevo archivo

Esto puede decir lo sublime para ejecutar los comandos

{ 
    "cmd": ["javac -cp /Users/yourusername/algs4/stdlib.jar:/Users/yourusername/algs4/algs4.jar:. \"$file\" && java -cp java -cp /Users/yourusername/algs4/stdlib.jar:/Users/yourusername/algs4/algs4.jar:. \"$file_base_name\""], 
    "shell":true, 
    "file_regex": "^(...*?):([0-9]*):?([0-9]*)", 
    "selector": "source.java" 
} 

Esperamos que esto pueda ayudar a aquellos que están siguiendo el curso del algoritmo de la Universidad de Princeton

0

que tenía este mismo problema. La solución de Renfei Wang funcionó para mí (todavía no tengo suficientes puntos para comentar directamente su respuesta).

En Sublime, navegue hasta Preferences: Browse Packages>JavaC.sublime_build.

Esto es lo que se parece a la mía:

{ 
    "cmd": ["javac", "-cp", "/Users/jason/Documents/lib/*:./","$file"], 
    "file_regex": "^(...*?):([0-9]*):?([0-9]*)", 
    "selector": "source.java" 
} 

/Users/jason/Documents/lib/*:/ permite sublime conoce la ubicación del directorio que contiene mis paquetes, por lo que ahora, cuando voy a construir, se carga los paquetes primero.

Cuestiones relacionadas