Mac用户 – 如何在Mac中设置CLASSPATHS(我正在进行Lucene演示)

我正在尝试让我的Apache Lucene演示工作,我将在本教程中设置类路径http://lucene.apache.org/java/2_3_2/demo.html

我已经在网上搜索了这两个我发现设置CLASSPATH的解决方案:

CLASSPATH=${CLASSPATH}:/Users/philhunter/Desktop/COM562\ Project/lucene-3.0.3/lucene-core-3.0.3.jar 

 setenv CLASSPATH ${CLASSPATH}:/Users/philhunter/Desktop/COM562\ Project/lucene-3.0.3/lucene-core-3.0.3.jar 

第二个出现错误-bash:setenv:command not found

第一个似乎接受了确定,但是我尝试了教程中的下一步,我收到了一个错误。 下一步是运行以下内容:

 Phil-hunters-MacBook:webapps philhunter$ java org.apache.lucene.demo.IndexFiles /Users/philhunter/Desktop/COM562\ Project/lucene-3.0.3/src 

这给了我错误:

线程“main”中的exceptionjava.lang.NoClassDefFoundError:org / apache / lucene / demo / IndexFiles

这让我相信我的CLASSPATHS没有正确设置。 假设这个我是对的吗? 我已经尝试过其他教程和演示,并且看到了相同的错误。 我是Lucene的新手,也是mac和Unix shell脚本的新手。 任何人都知道我是否正确设置CLASSPATH,如果这是错误的原因?

当你设置一个像CLASSPATH这样的环境变量时,默认情况下它只适用于当前进程(即shell进程本身) – 它不适用于你在下一行启动的java进程。 为了使其可用于其他进程,您需要“导出”该变量。 在这种情况下,您可以使用以下内容:

 export CLASSPATH=${CLASSPATH}:/Users/philhunter/Desktop/COM562\ Project/lucene-3.0.3/lucene-core-3.0.3.jar 

这基本上是说“将CLASSPATH变量设置为其当前值加上lucene jar的位置,并使新变量可用于从此shell启动的任何进程”。

但是,使用java,设置类路径的常用方法是使用-classpath-cp选项将其作为java命令本身的一部分。 在你的情况下,它看起来像:

 Phil-hunters-MacBook:webapps philhunter$ java -cp /Users/philhunter/Desktop/COM562\ Project/lucene-3.0.3/lucene-core-3.0.3.jar org.apache.lucene.demo.IndexFiles /Users/philhunter/Desktop/COM562\ Project/lucene-3.0.3/src 

顺便说一句,你在使用setenv行时看到的错误是因为setenv是在C shell中用来设置环境变量的命令,但是默认的Mac shell(以及你正在使用的shell)是bash ,它无法识别setenv并让你知道它无法识别错误消息: -bash: setenv: command not found

在终端类型

 $ vim ~/.bash_profile 

编辑文件并添加一行:

 export CLASSPATH=${CLASSPATH}:/usr/local/lucene-3.6.2/lucene-core-3.6.2.jar:/usr/local/lucene-3.6.2/contrib/demo/lucene-demo-3.6.2.jar; 

一定要改变你的道路。

按照自己的方式,在类路径中添加lucene-demo-3.0.3.jar会丢失。

我在我的主目录中创建一个.bash_profile文件并执行类似的操作

 export GRAILS_HOME=/usr/share/grails ... export PATH=${GRAILS_HOME}/bin:${GROOVY_HOME}/bin:/usr/local/mysql-5.1.45-osx10.6-x86_64/bin:${PATH} 

您可以使用它来设置类路径 – 这些示例显示如何声明环境变量以及如何在其他变量中使用该变量。