2011-11-02 47 views
6

Câu hỏi của tôi liên quan đến việc bao gồm tệp jar trong đường dẫn. Nó có 2 phần.Không thể thực thi tệp jar mặc dù đã đặt PATH và CLASSPATH

1) Tôi đang cố gắng thực thi file jar weka.jar nằm ở /home/andy/software/weka/weka.jar

PATH điểm biến để file jar này (tức là đến/home/andy/phần mềm /weka/weka.jar) và CLASSPATH cũng vậy.

Tuy nhiên khi tôi cố gắng chạy bình bằng cách sử dụng java -jar weka.jar, tôi gặp lỗi "Không thể truy cập jarfile weka.jar".

Bất kỳ ý tưởng gì đang xảy ra? Tôi đang sử dụng Ubuntu Linux. Tôi nhìn xung quanh trong SO và nó có vẻ như tôi không làm bất cứ điều gì đó là rõ ràng là sai (kể từ khi cả hai PATH và CLASSPATH dường như được thiết lập một cách chính xác).

2) Tôi muốn có thể đặt tất cả các tệp jar của mình vào một thư mục và bao gồm thư mục đó trong đường dẫn của tôi (thay vì bao gồm từng thùng riêng lẻ). Làm thế nào tôi có thể làm điều đó?

Xin cảm ơn trước.

EDIT 1 -> Đây là dòng lệnh của tôi

[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 -> Tôi đã thay đổi biến PATH để trỏ đến thư mục '/ home/andy/nghiên cứu/phần mềm/WEKA /' và vẫn nhận được 'không thể lỗi jarfile truy cập '

+0

Thử sử dụng '$ HOME' thay vì' ~ '? –

+0

Thực ra tôi đã sử dụng đường dẫn đầy đủ: /home/andy/software/weka/weka.jar. Xin lỗi vì điều đó. – user721975

+1

-jar có nghĩa là đường dẫn lớp sẽ bị bỏ qua – micfra

Trả lời

1

Khi bình nằm trong đường dẫn lớp, điều đó có nghĩa là thư viện khả dụng với jvm. Khi bạn muốn chạy một tệp jar (thực thi nó là chính), bạn vẫn cần phải cung cấp một đường dẫn hợp lệ cho tệp.

+1

Xin lỗi, tôi không hiểu. Sau đó, điểm của việc thêm nó vào classpath là gì nếu mỗi lần tôi cần cung cấp đường dẫn đầy đủ. – user721975

9

1) -jar tùy chọn java vô hiệu hóa việc sử dụng CLASSPATH. Hãy xem tại Setting the CLASSPATH of Weka

2) Lớp mục con đường có thể chứa ký tự basename wildcard , vốn được xem là tương đương với việc chỉ định một danh sách tất cả các tập tin trong thư mục với .jar gia hạn hoặc .JAR. Ví dụ: mục nhập đường dẫn lớp foo/ chỉ định tất cả các tệp JAR trong thư mục có tên foo. Mục nhập classpath bao gồm đơn giản là * mở rộng đến danh sách tất cả các tệp jar trong thư mục hiện tại. Hãy xem Setting the class path|Understanding class path wildcards

+0

Khi tôi chạy nó mà không có -jar, nó mang lại cho tôi một ngoại lệ "Ngoại lệ trong chủ đề" "java.lang.NoClassDefFoundError: weka/jar" ngoại lệ. – user721975

+0

Vui lòng chỉnh sửa câu hỏi của bạn thêm CLASSPATH và dòng lệnh của bạn. Bạn đã so sánh nó với liên kết tới trang wiki của Weka đã đăng ở trên chưa? – micfra

+0

Vâng tôi đã làm. Tôi đã có thể gọi weka bằng cách sử dụng 'java -cp $ CP -Xmx500m weka.gui.explorer.Explorer' nhưng tôi thực sự muốn có thể thực thi tệp jar trực tiếp (java weka.jar) vì tôi muốn một cách thực hiện chung các tệp jar bằng cách đưa chúng vào đường dẫn. Tôi cũng đã cập nhật câu hỏi như bạn đã đề xuất. Cảm ơn. – user721975

1

Không thể truy cập * .jar nghĩa là java không thể tìm thấy tệp jar này. Bạn nên chạy lệnh này (java -jar weka.jar) từ thư mục chứa jar của bạn, hoặc sửa biến PATH của bạn. Nó sẽ trỏ đến FOLDER nơi đặt jar, chứ không phải tệp jar trực tiếp.

+0

Đó là điều. Tôi không muốn ở trong thư mục mọi lúc và muốn có thể chạy tệp jar. Biến PATH trong thực tế trỏ đến thư mục '/ home/andy/research/software/weka /'. – user721975

+0

@ user721975 ok thì tại sao bạn không thể chạy 'java -jar/my/path/to/jar'? Tôi nghĩ rằng đó không phải là ý tưởng tốt nhất - để đặt vị trí của một cái bình cụ thể của bạn vào biến 'đường dẫn' của hệ thống – javagirl

3

Bạn không thực hiện như

java -jar weka.jar 

Thay vào đó bạn cho biết tên của một trong các lớp INSIDE jar.

một ví dụ đơn giản mà không cần thiết lập classpath:

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

một ví dụ đơn giản sử dụng bộ classpath:

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

java weka.core.SystemInfo 

phức tạp hơn ví dụ:

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

giả định của bạn trong thư mục tương tự như weka.jar tất cả những gì bạn cần là ./ trước đây tên jar

java -jar ./weka.jar weka.core.SystemInfo 
Các vấn đề liên quan