尽管设置了PATH和CLASSPATH,但无法执行jar文件

我的问题是关于在路径中包含jar文件。 它有两个部分。

1)我正在尝试执行位于/home/andy/software/weka/weka.jar中的weka.jar jar文件

PATH变量指向此jar文件(即/home/andy/software/weka/weka.jar),CLASSPATH也是如此。

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

有什么想法发生了什么? 我在Ubuntu Linux上。 我在SO中环顾四周,似乎我没有做任何明显错误的事情(因为PATH和CLASSPATH似乎都设置正确)。

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

提前致谢。

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

andy@laptop:~$ export CLASSPATH=$CLASSPATH:/home/andy/research/software/weka/weka.jar andy@laptop:~$ echo $CLASSPATH :/home/andy/research/software/weka/weka.jar andy@laptop:~$ java -jar weka.jar Unable to access jarfile weka.jar andy@laptop:~$ 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. andy@laptop:~$ 

编辑2 – >我改变PATH变量指向目录’/ home / andy / research / software / weka /’仍然得到’无法访问jarfile错误’

1)java的-jar选项禁用CLASSPATH。 请看看设置Weka的CLASSPATH

2)类路径条目可以包含基本名称通配符,这被认为等同于指定扩展名为.jar或.JAR的目录中所有文件的列表。 例如,类路径条目foo /指定名为foo的目录中的所有JAR文件。 简单地由*组成的类路径条目扩展为当前目录中所有jar文件的列表。 看看设置类路径|了解类路径通配符

你没有执行

  java -jar weka.jar 

而是给出INSIDE jar类之一的名称。

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

  java -jar /home/andy/research/software/weka/weka.jar weka.core.SystemInfo 

一个使用set classpath的简单示例:

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

更复杂的例子:

 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 

当jar在类路径中时,意味着该库可供jvm使用。 如果要运行jar文件(执行它的主要文件),仍需要提供该文件的有效路径。

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

假设你在weka.jar所在的文件夹中,你需要的是./之前的jar名称

 java -jar ./weka.jar weka.core.SystemInfo