如何在Ubuntu中为文件夹设置CLASSPATH变量


16

我知道这export CLASSPATH=/usr/local/java/tools.jar:$CLASSPATH会将tools.jar添加到CLASSPATH,但是我想将文件夹设置为CLASSPATH

像这样

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

但它不起作用。

Answers:


11

首先,一般来说,设置env var CLASSPATH通常会带来比解决的问题更多的问题-因为并非所有应用程序都希望/需要相同的类路径,并且经常会在类路径中包含不需要的甚至不需要的jar时中断。一个Java应用程序应仅包括其所需的最少数量的jar,不能多也不能少。

如果您有特定的,需要设置类路径的单个应用,则通常首选命令行选项:java -cp path1:path2:...。可以更改桌面图标的命令以包括这些选项,或者可以修改Shell脚本以包括这些选项。

话虽这么说(由于该规则总是有例外),然后根据Java的版本(此要求Java 6或更高版本),您可以通过添加“ *” 来指定将整个jar目录添加到类路径中在目录末尾;例如,以下内容:

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

手段:

  • /dir1/foo.jar -(单个jar)将添加到类路径中;
  • /dir2/dir3-此目录中所有未jar的类都将添加到类路径中(必须采用正确的包结构;例如,com.my.Foo.class必须位于中/dir2/dir3/com/my/Foo.class
  • /dir5/dir6/*-此目录中的所有jar(即/dir5/dir6/*.jar)都将添加到类路径中。请注意,该“ *”不是通配符(您不能使用f*.jar,甚至不能使用*.jar);这是一个特殊字符,表示“添加所有罐子”

通常,如果必须将jar的整个目录添加到应用程序的类路径中,则表明该应用程序未正确捆绑。相反,该应用程序应具有一个清单,其中包含它依赖的jar列表。或者至少,仅应将一个jar添加到您的类路径中,并且该jar可以在清单中的某个子目录中包含整个jar列表。


我花了5个多小时才在ubuntu 12.04中弄清楚这一点。编译文件并运行该类后,有两点很重要。1.是否在课堂上使用包。并且您需要在包父文件夹中使用“ java -cp。className”。2.您必须使用“。:”,例如“ java -cp。:/ usr / lib / jvm / java-1.6.0-openjdk-i386 / jre / lib / *:/ dir2 / jarlib / *”。
zhihong 2014年

@zhihong,您应该考虑使用像netbeans这样的IDE,让它遵循正在使用的构建工具,该工具实际上是在配置您的类路径。在Netbeans中,使用maven或gradle(或ant)建立一个新项目,但这在处理依赖项时变得太复杂了(另请参阅:maven ant任务,我更喜欢ivy)。首先,Gradle是当前的“热门”事物。您应该尝试一下。此外,(1)您应始终使用程序包名称;(2)无需在类路径的jvm目录中包含类;它们已经在“ boot”类路径中。
迈克尔

感谢您的建议。实际上,我使用eclipse,并且代码在那里正确运行,但是当我在终端中运行它时,出现了“ ClassNotFoundException”。我尝试了多种添加外部lib / jar的方法,但是都失败了。最后,它通过在命令行WITH中包含jvm目录和外部lib / jar来工作。但是,我今天尝试过,您是正确的,不需要jvm目录。
zhihong 2014年

2

如果要永久设置类路径,则1)找出java的安装位置。您可以在/ usr / lib / jvm / ..中使用“ whereis java” openjdk-7 / 6。

2)我们需要在/ etc / environment中设置CLASSPATH

  sudo gedit /etc/environment

3)添加以下内容..(不要在键入时留任何空间)(根据您的Java版本和安装进行自定义)(此主路径用于打开jdk 7)

   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

用“:”分隔目录


为什么每个人都将“ {JAVA_HOME} / lib”添加到其类路径中?这是没有必要的,甚至不是一个好主意。因此,设置env CLASSPATH也是一个坏主意,除非它在Shell脚本中,仅针对该脚本,在这种情况下,java的命令行选项“ -cp”仍然是可取的。
迈克尔

0

打开终端并输入

须藤纳米〜/ .bashrc

添加您需要的所有出口,例如...

导出JAVA_HOME = / usr / local / java / jdk1.6.0_06(您的路径)

导出ANT_HOME = / opt / ant / apache-ant-1.9.4

最终重新启动终端以使更改生效

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.