Cómo establecer la variable CLASSPATH para una carpeta en Ubuntu

16

Sé que export CLASSPATH=/usr/local/java/tools.jar:$CLASSPATHagregará tools.jar a CLASSPATH, pero quiero establecer la carpeta en CLASSPATH

Me gusta esto

export CLASSPATH=/usr/local/java/lib/:$CLASSPATH

Pero no está funcionando.

Ramesh Kotha
fuente

Respuestas:

11

Primero, en general, la configuración de la var env CLASSPATHgeneralmente causa más problemas de los que resuelve, ya que no todas las aplicaciones quieren / necesitan el mismo classpath, y a menudo se rompen cuando se incluyen jarras no deseadas o incluso innecesarias en el classpath. Una aplicación de Java solo debe incluir el número mínimo de frascos que requiere, ni más ni menos.

Cuando tienes específica, aplicaciones individuales que requieren que se establece la ruta de clase, entonces se prefiere por lo general la opción de línea de comandos: java -cp path1:path2:.... Los iconos del escritorio pueden tener su comando alterado para incluir estas opciones, o los scripts de shell pueden modificarse para incluir estas opciones.

Dicho esto (y dado que siempre hay excepciones a la regla), dependiendo de la versión de java (esto requiere java 6 o posterior), puede especificar que se agregue un directorio completo de jarras al classpath agregando un " *" al final de un directorio; por ejemplo, lo siguiente:

 /dir1/foo.jar:/dir2/dir3:/dir5/dir6/*:etc...

Medio:

  • /dir1/foo.jar - (el jar individual) se agregará al classpath;
  • /dir2/dir3- todas las clases sin jar de este directorio se agregarán al classpath (debe estar en la estructura de paquete adecuada; por ejemplo, com.my.Foo.classdebe estar en /dir2/dir3/com/my/Foo.class)
  • /dir5/dir6/*- todos los frascos en este directorio (es decir, /dir5/dir6/*.jar) se agregarán al classpath. Tenga en cuenta que este " *" no es un comodín (no puede usarlo f*.jarni siquiera *.jar); es un caracter especial que indica "agregar todos los frascos"

En general, si tiene que agregar un directorio completo de jarras al classpath de la aplicación, la aplicación no se incluyó correctamente. Más bien, la aplicación debería tener un manifiesto que contenga la lista de tarros de los que depende. O al menos, solo se debe agregar un jar a su classpath, y ese jar puede tener en su manifiesto la lista completa de jar en algún subdirectorio.

Miguel
fuente
Me lleva más de 5 horas resolver esto en ubuntu 12.04. Después de compilar un archivo y ejecutar la clase, dos cosas son importantes. 1. Si usa el paquete en su clase. Y debe usar "java -cp. ClassName" en la carpeta padre del paquete. 2. Debe usar ".:" Como "java -cp.: / Usr / lib / jvm / java-1.6.0-openjdk-i386 / jre / lib / *: / dir2 / jarlib / *".
zhihong
@zhihong deberías considerar usar un IDE como netbeans, dejándolo diferir a la herramienta de compilación en uso, que en realidad configura tu classpath. En Netbeans, configure un nuevo proyecto usando maven o gradle (o ant - pero esto se vuelve demasiado complicado cuando se trata de dependencias (ver también: tareas de ant maven, que prefiero a la hiedra)). Gradle es actualmente la cosa "caliente", fwiw; Usted debe darle una oportunidad. Además, (1) siempre debe usar nombres de paquetes; y (2) nunca es necesario incluir clases en el directorio jvm en el classpath; ya están en el classpath "boot".
Michael
gracias por tu sugerencia. En realidad, uso eclipse, y el código se ejecuta correctamente allí, pero cuando lo ejecuto en el terminal, obtengo la "ClassNotFoundException". Intenté muchas formas de agregar la lib / jar externa, pero todas fallaron. Finalmente, funciona al incluir el directorio jvm y lib / jar externo en la línea de comando WITH. Pero, lo intenté hoy, tienes razón, el directorio jvm no es necesario.
zhihong
2

si desea establecer classpath permanentemente, entonces 1) averigüe dónde está instalado java ... puede usar "whereis java" openjdk-7/6 está en / usr / lib / jvm / .....

2) necesitamos configurar CLASSPATH en / etc / environment

  sudo gedit /etc/environment

3) agregue los siguientes me gusta ... (NO DEJE NINGÚN ESPACIO MIENTRAS ESCRIBE) (personalice de acuerdo con su versión e instalación de Java) (esta ruta de inicio es para jdk 7 abierto)

   JAVA_HOME="/usr/lib/jvm/java-7-openjdk-i386/bin"

   export JAVA_HOME

   CLASSPATH=".:/usr/lib/jvm/java-7-openjdk-i386/lib:/home/laptop/Desktop/a2"

   export CLASSPATH

directorio separado por ":"

rightkushagra
fuente
¿Por qué todos agregan "{JAVA_HOME} / lib" a su classpath? No es necesario, ni siquiera una buena idea. Para el caso, establecer la CLASSPATH env también es una mala idea, a menos que esté en un script de shell, solo para ese script, en cuyo caso, la opción de línea de comandos "-cp" a Java aún sería preferible.
Michael
0

terminal abierto y tipo

sudo nano ~ / .bashrc

agregue todas las exportaciones que necesita como ...

export JAVA_HOME = / usr / local / java / jdk1.6.0_06 (su ruta)

exportar ANT_HOME = / opt / ant / apache-ant-1.9.4

finalmente reinicie el terminal para que los cambios surtan efecto

mateen
fuente