我的问题是关于在路径中包含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错误'
答案 0 :(得分: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
答案 1 :(得分:4)
您不执行
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
答案 2 :(得分:1)
当jar在类路径中时,表示该库可供jvm使用。当你想运行一个jar文件(执行它的主要文件)时,你仍然需要提供一个有效的文件路径。
答案 3 :(得分:1)
无法访问* .jar意味着java无法找到此jar文件。您应该从jar所在的文件夹运行此命令(java -jar weka.jar),或者更正PATH变量。它应该指向放置jar的FOLDER,而不是直接放在jar文件中。
答案 4 :(得分:0)
假设您与weka.jar
位于同一文件夹中,您需要的所有内容都是{jar}名称之前的./
java -jar ./weka.jar weka.core.SystemInfo