Cách đặt biến CLASSPATH cho một thư mục trong Ubuntu


16

Tôi biết rằng export CLASSPATH=/usr/local/java/tools.jar:$CLASSPATHsẽ thêm tools.jar vào CLASSPATH, nhưng tôi muốn đặt thư mục thành CLASSPATH

như thế này

export CLASSPATH=/usr/local/java/lib/:$CLASSPATH

nhưng nó không hoạt động.

Câu trả lời:


11

Đầu tiên, nói chung, việc đặt var env CLASSPATHthường gây ra nhiều vấn đề hơn giải quyết - vì không phải tất cả các ứng dụng đều muốn / cần cùng một đường dẫn, và thường bị phá vỡ khi các lọ không mong muốn hoặc thậm chí không cần thiết được đưa vào đường dẫn lớp. Một ứng dụng java chỉ nên bao gồm số lượng lọ tối thiểu mà nó yêu cầu, không hơn, không kém.

Khi bạn có các ứng dụng cụ thể, riêng lẻ yêu cầu đường dẫn lớp được đặt, thì thông thường tùy chọn dòng lệnh sẽ được ưu tiên : java -cp path1:path2:.... Các biểu tượng trên màn hình có thể thay đổi lệnh của chúng để bao gồm các tùy chọn này hoặc tập lệnh shell có thể được sửa đổi để bao gồm các tùy chọn này.

Điều đó đang được nói (và vì luôn có ngoại lệ cho quy tắc), sau đó tùy thuộc vào phiên bản java (điều này yêu cầu java 6 trở lên), bạn có thể chỉ định rằng toàn bộ thư mục của các tệp được thêm vào đường dẫn lớp bằng cách thêm " *" ở cuối thư mục; ví dụ như sau:

 /dir1/foo.jar:/dir2/dir3:/dir5/dir6/*:etc...

Có nghĩa:

  • /dir1/foo.jar - (bình duy nhất) sẽ được thêm vào đường dẫn lớp;
  • /dir2/dir3- tất cả các lớp un-jar'd trong thư mục này sẽ được thêm vào đường dẫn lớp (phải có cấu trúc gói phù hợp; ví dụ: com.my.Foo.classphải ở trong /dir2/dir3/com/my/Foo.class)
  • /dir5/dir6/*- tất cả các tệp trong thư mục này (tức là /dir5/dir6/*.jar) sẽ được thêm vào đường dẫn lớp. Lưu ý rằng " *" này không phải là ký tự đại diện (bạn không thể sử dụng f*.jarhoặc thậm chí *.jar); đó là một ký tự đặc biệt chỉ ra "thêm tất cả các lọ"

Nói chung, nếu bạn phải thêm toàn bộ thư mục các tệp vào đường dẫn lớp của ứng dụng, ứng dụng không được đóng gói chính xác. Thay vào đó, ứng dụng nên có một bảng kê khai chứa danh sách các lọ mà nó phụ thuộc. Hoặc ít nhất, chỉ nên thêm một bình vào đường dẫn lớp của bạn và bình đó có thể có trong bảng kê khai toàn bộ danh sách các lọ trong một thư mục con.


Tôi mất hơn 5 giờ để tìm ra điều này trong Ubuntu 12.04. Sau khi bạn biên dịch một tệp và chạy lớp, hai điều quan trọng. 1. Cho dù bạn sử dụng gói trong lớp học của bạn. Và bạn cần sử dụng "java -cp. ClassName" trong thư mục cha mẹ gói. 2. Bạn phải sử dụng ".:" Như "java -cp .: / Usr / lib / jvm / java-1.6.0-openjdk-i386 / jre / lib / *: / dir2 / jarlib / *".
zhihong

@zhihong bạn nên xem xét việc sử dụng một IDE như netbeans, cho phép nó trì hoãn công cụ xây dựng đang sử dụng, điều này thực sự cấu hình đường dẫn lớp của bạn. Trong Netbeans, thiết lập một dự án mới bằng cách sử dụng maven hoặc gradle (hoặc ant - nhưng điều này trở nên quá phức tạp khi xử lý các phụ thuộc (xem thêm: các nhiệm vụ của maven, mà tôi thích hơn cây thường xuân)). Gradle hiện đang là điều 'nóng', fwiw; Bạn nên cung cấp cho nó một thử. Ngoài ra, (1) bạn nên luôn luôn sử dụng tên gói; và (2) không bao giờ cần phải bao gồm các lớp trong thư mục jvm trong đường dẫn lớp; chúng đã có trong classpath "boot".
michael

cảm ơn lời đề nghị của bạn Trên thực tế, tôi sử dụng nhật thực và mã chạy chính xác ở đó, nhưng khi tôi chạy nó trong thiết bị đầu cuối, sau đó nhận được "ClassNotFoundException". Tôi đã thử nhiều cách để thêm lib / jar bên ngoài, nhưng tất cả đều thất bại. Cuối cùng, nó hoạt động bằng cách bao gồm thư mục jvm và lib / jar bên ngoài trong dòng lệnh VỚI. Nhưng, tôi đã thử hôm nay, bạn đã đúng, thư mục jvm không cần thiết.
zhihong

2

nếu bạn muốn đặt classpath vĩnh viễn thì 1) tìm xem java được cài đặt ở đâu .. bạn có thể sử dụng "whereis java" openjdk-7/6 nằm trong / usr / lib / jvm / .....

2) chúng ta cần thiết lập CLASSPATH trong / etc / môi trường

  sudo gedit /etc/environment

3) thêm các lượt thích sau đây .. (ĐỪNG BỎ L AN BẤT K SP SPACES WHILE TYPING nào) (tùy chỉnh theo phiên bản java và cài đặt của bạn) (đường dẫn này dành cho mở jdk 7)

   JAVA_HOME="/usr/lib/jvm/java-7-openjdk-i386/bin"

   export JAVA_HOME

   CLASSPATH=".:/usr/lib/jvm/java-7-openjdk-i386/lib:/home/laptop/Desktop/a2"

   export CLASSPATH

thư mục riêng biệt bằng ":"


Tại sao mọi người lại thêm "{JAVA_HOME} / lib" vào đường dẫn lớp của họ? Nó không cần thiết, hoặc thậm chí là một ý tưởng tốt. Đối với vấn đề đó, việc đặt env CLASSPATH cũng là một ý tưởng tồi, trừ khi nó nằm trong tập lệnh shell, chỉ với tập lệnh đó, trong trường hợp đó, tùy chọn dòng lệnh "-cp" cho java vẫn sẽ thích hợp hơn.
michael

0

mở thiết bị đầu cuối và loại

sudo nano ~ / .bashrc

thêm tất cả hàng xuất khẩu bạn cần như ...

xuất JAVA_HOME = / usr / local / java / jdk1.6.0_06 (đường dẫn của bạn)

xuất ANT_HOME = / opt / ant / apache-ant-1.9.4

cuối cùng khởi động lại thiết bị đầu cuối để thay đổi có hiệu lực

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.