简体   繁体   English

Java类路径问题

[英]Java Classpath Problems

I've compiled and I am now trying to run this program from the terminal in OSX and Fendora using the following command from within the ie directory: 我已经编译了,现在我正尝试在ie目录中使用以下命令从OSX和Fendora中的终端运行程序:

java ie.moguntia.webcrawler.Psucker http://www.wikipedia.org test

However I get the following error: 但是我收到以下错误:

Exception in thread "main" java.lang.NoClassDefFoundError: ie/moguntia/webcrawler/Psucker
Caused by: java.lang.ClassNotFoundException: ie.moguntia.webcrawler.Psucker
    at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:247)

I haven't ran applications that used packages from the command line before so I am therefore unable to figure out the error. 我之前从未运行过使用命令行中的软件包的应用程序,因此无法确定错误。

I have attempted to set the classpath using export CLASSPATH=. 我试图使用export CLASSPATH=.设置类路径export CLASSPATH=. so that the current directory would be added to the classpath. 这样就可以将当前目录添加到类路径中。

The directory structure is as follows: 目录结构如下:

ie/moguntia/webcrawler/

Depending on where your compiled classes are located, you need to include this location in the java command, eg if they are in the classes directory: 根据编译类的位置,您需要在java命令中包括此位置,例如,如果它们位于classes目录中:

java -cp classes ie.moguntia.webcrawler.PSucker http://www.wikipedia.org test

or if they are in the current directory: 或如果它们在当前目录中:

java -cp . ie.moguntia.webcrawler.PSucker http://www.wikipedia.org test

or just 要不就

java ie.moguntia.webcrawler.PSucker http://www.wikipedia.org test

Here's how I was able to run this (unzip, cd to directory, compile, find classes, run): 这是我运行该文件的方法(将文件解压缩,cd到目录,编译,查找类,运行):

(13:55:52) ~/Desktop/temp → ll
total 32
-rw-r--r--@ 1 Nils.Winkler  staff    14K 12 Mär 13:41 multiweb.zip

(13:56:01) ~/Desktop/temp → unzip multiweb.zip -d multiweb
Archive:  multiweb.zip
   creating: multiweb/CVS/
   creating: multiweb/ie/
   creating: multiweb/ie/CVS/
   creating: multiweb/ie/moguntia/
   creating: multiweb/ie/moguntia/CVS/
   creating: multiweb/ie/moguntia/threads/
   creating: multiweb/ie/moguntia/threads/CVS/
  inflating: multiweb/ie/moguntia/threads/ControllableThread.java  
  inflating: multiweb/ie/moguntia/threads/MessageReceiver.java  
  inflating: multiweb/ie/moguntia/threads/ObjectQueue.java  
  inflating: multiweb/ie/moguntia/threads/Queue.java  
  inflating: multiweb/ie/moguntia/threads/ThreadController.java  
   creating: multiweb/ie/moguntia/webcrawler/
   creating: multiweb/ie/moguntia/webcrawler/CVS/
  inflating: multiweb/ie/moguntia/webcrawler/PSucker.java  
  inflating: multiweb/ie/moguntia/webcrawler/PSuckerThread.java  
  inflating: multiweb/ie/moguntia/webcrawler/SaveURL.java  
  inflating: multiweb/ie/moguntia/webcrawler/URLQueue.java  
  inflating: multiweb/ie/moguntia/webcrawler/WSDLCrawler.java  
  inflating: multiweb/ie/moguntia/webcrawler/WSDLCrawlerThread.java 

(13:56:08) ~/Desktop/temp → cd multiweb

(13:56:57) ~/Desktop/temp/multiweb → javac ie/moguntia/webcrawler/*.java
Note: Some input files use unchecked or unsafe operations.
Note: Recompile with -Xlint:unchecked for details.

(13:57:11) ~/Desktop/temp/multiweb → find . -name *.class
./ie/moguntia/threads/ControllableThread.class
./ie/moguntia/threads/MessageReceiver.class
./ie/moguntia/threads/Queue.class
./ie/moguntia/threads/ThreadController.class
./ie/moguntia/webcrawler/PSucker.class
./ie/moguntia/webcrawler/PSuckerThread.class
./ie/moguntia/webcrawler/SaveURL.class
./ie/moguntia/webcrawler/URLQueue.class
./ie/moguntia/webcrawler/WSDLCrawler.class
./ie/moguntia/webcrawler/WSDLCrawlerThread.class

(13:57:18) ~/Desktop/temp/multiweb → java ie.moguntia.webcrawler.PSucker http://www.wikipedia.org test
[0] http://www.wikipedia.org

It should work if you run it from outside the ie directory. 如果您从ie目录外部运行它,它应该可以工作。

Note that relying on the CLASSPATH environment variable is generally not recommended; 注意,通常不建议依赖CLASSPATH环境变量。 instead explicitly put the classpath on hte command line using the -cp switch 而是使用-cp开关将classpath明确地放在hte命令行上

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM