2011-11-02 83 views
6

我的问题是关于在路径中包含jar文件。它有2个部分。尽管设置了PATH和CLASSPATH,但无法执行jar文件

1)我试图执行位于/home/andy/software/weka/weka.jar

PATH变量点weka.jar jar文件到这个jar文件(即到/ home /安迪/软件/weka/weka.jar),CLASSPATH也是如此。

但是,当我尝试使用java -jar weka.jar运行jar时,出现“无法访问jarfile weka.jar”错误。

任何想法是怎么回事?我在Ubuntu Linux上。我环顾四周,好像我没有做任何明显错误的事情(因为PATH和CLASSPATH似乎设置正确)。

2)我想能够把我所有的jar文件放在一个目录下,并将该目录包含在我的路径中(而不是单独包含每个jar)。我怎样才能做到这一点?

在此先感谢。

编辑1 - >这是我的命令行

[email protected]:~$ export CLASSPATH=$CLASSPATH:/home/andy/research/software/weka/weka.jar 
[email protected]:~$ echo $CLASSPATH 
:/home/andy/research/software/weka/weka.jar 
[email protected]:~$ java -jar weka.jar 
Unable to access jarfile weka.jar 
[email protected]:~$ java weka.jar 
Exception in thread "main" java.lang.NoClassDefFoundError: weka/jar 
Caused by: java.lang.ClassNotFoundException: weka.jar 
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:307) 
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301) 
at java.lang.ClassLoader.loadClass(ClassLoader.java:248) 
Could not find the main class: weka.jar. Program will exit. 
[email protected]:~$ 

EDIT 2 - >我改变PATH变量指向目录 '/家/安迪/科研/软件/秧鸡/',仍然可以得到“无法访问jarfile错误'

+0

尝试使用'$ HOME'而不是'~'? –

+0

其实我已经使用完整路径:/home/andy/software/weka/weka.jar。对于那个很抱歉。 – user721975

+1

-jar表示类路径将被忽略 – micfra

回答

1

当jar在类路径中时,这意味着该库可用于jvm。当你想运行一个jar文件(执行它的主要部分)时,你仍然需要提供一个有效的文件路径。

+1

对不起,我不明白。那么如果每次我需要提供完整路径,那么将它添加到类路径又有什么意义呢? – user721975

9

1)java的-jar选项禁止使用CLASSPATH。请看看Setting the CLASSPATH of Weka

2)类路径条目可包含的基本部分通配符,这被认为等同于指定在扩展的.jar或.jar目录下的所有文件的列表。例如,类路径条目foo/指定名为foo的目录中的所有JAR文件。一个仅包含*的类路径条目展开为当前目录中所有jar文件的列表。看看Setting the class path|Understanding class path wildcards

+0

当我运行它没有-jar时,它给了我一个“线程中的异常”主“java.lang.NoClassDefFoundError:weka/jar”异常。 – user721975

+0

请编辑您的问题添加您的CLASSPATH和您的命令行。你是否将它与上面发布的Weka wiki的链接进行了比较? – micfra

+0

是的,我做到了。我能够使用'java -cp $ CP -Xmx500m weka.gui.explorer.Explorer'来调用weka,但我真的希望能够直接执行jar文件(java weka.jar),因为我想要一个通用的执行方式将jar文件包含在路径中。我也按照你的建议更新了这个问题。谢谢。 – user721975

1

无法访问* .jar意味着java找不到这个jar文件。您应该从您的jar所在的文件夹运行此命令(java -jar weka.jar),或更正PATH变量。它应该指向放置jar的FOLDER,而不是直接放在jar文件中。

+0

那就是这样的事情。我不想一直在文件夹中,并希望能够仍然运行该jar文件。 PATH变量实际上指向目录'/ home/andy/research/software/weka /'。 – user721975

+0

@ user721975好的,那你为什么不能运行'java -jar/my/path/to/jar'?我认为反正不是最好的想法 - 把你的特定jar的位置放到系统的'path'变量中 – javagirl

3

java -jar weka.jar 

相反,你给类中的jar之一的名字你不执行。

没有设置classpath中一个简单的例子:

export CLASSPATH=$CLASPATH:/home/andy/research/software/weka/weka.jar 

java weka.core.SystemInfo 

更复杂的例子:

java -jar /home/andy/research/software/weka/weka.jar weka.core.SystemInfo 
使用设置CLASSPATH

一个简单的例子

export WEKA_HOME=/home/andy/research/software/weka/ 

export CLASSPATH=$CLASPATH:$WEKA_HOME/weka.jar 

export HEAP_OPTION=-Xms4096m -Xmx8192m 
export JAVA_COMMAND=java $HEAP_OPTION 

$JAVA_COMMAND weka.core.SystemInfo 
0

假设你在同一个文件夹中weka.jar所有你需要的是./之前瓶名称

java -jar ./weka.jar weka.core.SystemInfo 
相关问题