Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/365.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 尽管设置了路径和类路径,但无法执行jar文件_Java_Path_Jar_Classpath_Weka - Fatal编程技术网

Java 尽管设置了路径和类路径,但无法执行jar文件

Java 尽管设置了路径和类路径,但无法执行jar文件,java,path,jar,classpath,weka,Java,Path,Jar,Classpath,Weka,我的问题是关于在路径中包含jar文件。它有两个部分 1) 我正在尝试执行位于/home/andy/software/weka/weka.jar中的weka.jar文件 PATH变量指向这个jar文件(即to/home/andy/software/weka/weka.jar),CLASSPATH也指向这个jar文件 然而,当我尝试使用java-jar weka.jar运行jar时,我得到一个错误“无法访问jar文件weka.jar” 知道发生了什么事吗?我在Ubuntu Linux上。我环顾四周,

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

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

PATH变量指向这个jar文件(即to/home/andy/software/weka/weka.jar),CLASSPATH也指向这个jar文件

然而,当我尝试使用java-jar weka.jar运行jar时,我得到一个错误“无法访问jar文件weka.jar”

知道发生了什么事吗?我在Ubuntu Linux上。我环顾四周,似乎我没有做任何明显错误的事情(因为路径和类路径似乎都设置正确)

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错误”

当jar位于类路径中时,表示jvm可以使用该库。当您想要运行jar文件(执行它的main)时,仍然需要提供文件的有效路径。

1)-java的jar选项禁用类路径的使用。请看一看


2) 类路径项可以包含basename通配符,这被认为等同于指定扩展名为.jar或.jar的目录中所有文件的列表。例如,类路径条目foo/指定名为foo的目录中的所有JAR文件。仅由*组成的类路径项扩展为当前目录中所有jar文件的列表。看看

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

您不以

 java -jar weka.jar
相反,您给出了jar中的一个类的名称

一个不设置类路径的简单示例:

 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

假设您的文件夹与
weka.jar
位于同一个文件夹中,您所需要的只是jar名称前面的
/

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

尝试使用
$HOME
而不是
~
?实际上我已经使用了完整路径:/HOME/andy/software/weka/weka.jar。很抱歉。-jar意味着类路径将被忽略。您只能将所有jar文件放在一个目录中,并且只能在java 6及更高版本中将该目录包含在类路径中。你需要使用通配符。我为你的问题添加了一个答案。但你所做的是。正在尝试访问名为weka jar的类。java在做什么:“试图找到一个名为weka的包,在名为jar的包类中,在该类main方法中”对不起,我不明白。那么,如果每次我都需要提供完整的路径,那么将其添加到类路径有什么意义呢?当我在没有-jar的情况下运行它时,它会给我一个“线程中的异常”main“java.lang.NoClassDefFoundError:weka/jar”异常。请在添加类路径和命令行时编辑您的问题。你有没有把它和上面发布的Weka维基链接进行过比较?是的,我有。我能够使用“java-cp$cp-Xmx500m weka.gui.explorer.explorer”调用weka,但我确实希望能够直接执行jar文件(java-weka.jar),因为我希望通过将jar文件包含在路径中来获得执行jar文件的通用方法。我也按照你的建议更新了这个问题。谢谢。请尝试这两种方法:1)java-weka.gui.explorer.explorer和2)java-jar-weka.jar-weka.gui.explorer.explorer。似乎weka开发人员没有将主类添加到清单文件中,所以java不知道该怎么做。我不想一直呆在这个文件夹中,我希望仍然能够运行jar文件。PATH变量实际上指向目录“/home/andy/research/software/weka/”@user721975好的,那么为什么不能运行“java-jar/my/PATH/to/jar”?我认为这无论如何都不是最好的主意——将一个特定jar的位置放在系统“path”变量中