Mac 用户 - 如何在 Mac 中设置 CLASSPATHS(我正在做一个 Lucene 演示)

2022-01-15 00:00:00 macos lucene java classpath

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

I'm trying to get my Apache Lucene demo to work and I'm down to setting the classpath in this tutorial http://lucene.apache.org/java/2_3_2/demo.html

我在网上搜索过,这些是我找到的 2 个设置 CLASSPATH 的解决方案:

I've hunted the web and these wer the 2 solutions I found to set 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: 找不到命令

The second one brings up a error -bash: setenv: command not found

第一个似乎可以接受,但是当我尝试教程中的下一步时,我得到了一个错误.下一步是运行以下命令:

The first one seemed to accept ok but wen i tried the next step in the tutorial i got an error. The next step was to run the following:

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

这给了我错误:

线程 "main" java.lang.NoClassDefFoundError: org/apache/lucene/demo/IndexFiles 中的异常

Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/lucene/demo/IndexFiles

这让我相信我的 CLASSPATHS 设置不正确.我这样假设是对的吗?我已经尝试过其他教程和演示,并看到很多相同的错误.我是 Lucene 的新手,对 mac 和 Unix shell 脚本相对较新.任何人都知道我是否正确设置了 CLASSPATH 以及这是否是错误的原因?

This leads me to believe my CLASSPATHS didnt set correctly. Would I be right in assuming this? I have tried other tutorials and demos and see to get this same error quite a bit. Im new to Lucene and relatively new to mac and Unix shell scripting. Anyone know if I am setting the CLASSPATH correctly and if thats the cause of the errors?

推荐答案

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

When you set an environment variable like CLASSPATH then by default it only applies to the current process (i.e. the shell process itself) - it isn't available to the java process you launch in the next line. In order to make it available to other processes you need to "export" the variable. In this case you can use something like:

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

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

This basically says "set the CLASSPATH variable to its current value plus the location of the lucene jar, and make the new variable available to any processes launched from this shell".

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

However, with java the usual way of setting the classpath is to do it as part of the java command itself, using the -classpath or -cp options. In your case it would look something like:

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 中用于设置环境变量的命令,但默认的 Macshell(以及您正在使用的 shell)是 bash ,它无法识别 setenv 并通过错误消息让您知道它无法识别它: -bash: setenv: 找不到命令.

As an aside, the error you see when using the setenv line is because setenv is the command used in the C shell to set environment variables, but the default Mac shell (and the shell you're using) is bash which doesn't recognise setenv and lets you know it doesn't recognise it with the error message: -bash: setenv: command not found.

相关文章