2012-10-11 25 views
6

Tôi muốn cài đặt các tệp JAR khác nhau, như các ổ đĩa JDBC cơ sở dữ liệu trên OS X để các ứng dụng Java khác sẽ tìm thấy chúng.Nơi cài đặt các tệp JAR trên OS X để các ứng dụng Java khác sẽ tìm thấy chúng?

Tôi nên đặt chúng ở đâu? Tôi đã thử ~/Library/Java/Extensions nhưng nó không seam để làm việc.

chi tiết:

OS X 10.8.2 

java version "1.6.0_35" 
Java(TM) SE Runtime Environment (build 1.6.0_35-b10-428-11M3811) 
Java HotSpot(TM) 64-Bit Server VM (build 20.10-b01-428, mixed mode) 

Lưu ý: Tôi không có quyền kiểm soát như thế nào ứng dụng được khởi tạo, nhưng tôi giả định rằng ứng dụng không incude đó là phân phối Java riêng và nó sẽ bắt đầu các phiên bản hệ điều hành được cài đặt (một trong đó là có sẵn từ dòng lệnh).

Ngoài ra, tôi không có bất kỳ thiết lập classpath, và hãy nhớ rằng các biến môi trường mà có sẵn cho các chương trình dòng lệnh là không giống như những cái có sẵn để ứng dụng GUI trên OS X.

tôi cần phải xác định rằng tôi đang cố gắng điều này cho máy phát triển của tôi và cách tiếp cận này không phải là một cách để triển khai các ứng dụng Java.

+0

Bạn hiện không sử dụng bất kỳ công cụ quản lý phụ thuộc nào? Giống như gradle, maven hoặc ant/ivy? Điều đó sẽ làm cho cuộc sống dễ dàng hơn cho bạn. – maba

Trả lời

1

Chúng phải được đưa vào đường dẫn lớp của ứng dụng. Nếu bạn thực thi nó từ dòng lệnh, thì hãy sử dụng ví dụ: "java -cp ~/Library/Java/Extensions/foo.jar Bar"

Mặt khác, nếu bạn sử dụng một máy chủ ứng dụng như tomcat, bạn có thể gói lọ bên trong chiến tranh của ứng dụng của bạn để đặt nó vào thư mục dùng chung của máy chủ.

10

Vui lòng KHÔNG làm điều này. Đây là lý do: Các ứng dụng khác sẽ bị hỏng, vì các tệp JAR đó sẽ được tải cho mọi ứng dụng Java.

Chi tiết: Tôi bán ứng dụng Java cho Mac. Nó dựa vào việc có một phiên bản cụ thể gần đây của một tệp JAR (cho JFreeChart). Đôi khi có một phiên bản cũ của cùng một tệp JAR trong thư mục Tiện ích thích hợp. Điều này phá vỡ ứng dụng của tôi.

Nhưng nếu bạn thực sự muốn làm điều này: Theo Apple's docs:

Thư viện mở rộng

phần mềm Java trên các nền tảng khác thường làm cho việc sử dụng/lib thư mục $ JAVA_HOME/ext trong vòng một cài đặt JDK để lưu trữ lớp hỗ trợ hoặc tệp jar. Trong khi Java cho Mac OS X cũng chứa một thư mục lib/ext , các nhà phát triển không được trực tiếp sửa đổi nó cho cùng một lý do được đề cập ở trên. Thư mục/Library/Java/Extensions có thể được sử dụng cho các tệp jar bổ sung hoặc các thư viện JNI cần phải được đặt trên đường dẫn lớp hệ thống. Để có quyền truy cập được kiểm soát nhiều hơn, thư mục ~/Library/Java/Extensions có thể được sử dụng cho người dùng cấp cài đặt thư viện hỗ trợ. Các mục được đặt trong một trong các thư mục này không cần phải được đặt tên trong đường dẫn lớp của ứng dụng và sẽ có sẵn cho tất cả các ứng dụng chạy theo phạm vi tương ứng (cấp hệ thống hoặc cấp người dùng, tùy thuộc vào thư mục nào được sử dụng).

0

Tôi sẽ nhận xét thứ hai của Steve và đề nghị thêm bạn sử dụng Maven hoặc Ivy để quản lý sự phụ thuộc của bạn.

Quản lý thư viện là cho mỗi dự án. Việc quản lý cập nhật và phụ thuộc lẫn nhau dễ dàng hơn nhiều. Maven (Tôi không biết về Ivy) có thể cho bạn biết libs nào đã lỗi thời, xung đột với nhau ... Đối với mỗi dự án bạn có thể chỉ định chính xác các phiên bản bạn yêu cầu mà không lo ngại liệu các thay đổi có phá vỡ các dự án khác hay không.

-3

Ok chỉ đóng góp của mình ... nhưng tôi muốn chạy chương trình cơ sở dữ liệu nhỏ ở dòng lệnh nhưng tôi cần mysql-connector-java-5.1.29-bin.jar trong đường dẫn lớp để làm như vậy. Tôi đã dành thời gian cố gắng tìm ra và tìm ra giải pháp. Tôi đã thả tệp jar vào thư mục Library/Java/Extensions và khởi động lại máy của mình. Bây giờ ở trên nói rằng bạn nên bao gồm classpath khi bạn đang "thực hiện" chương trình (java -cp ~/Library/Java/Extensions/foo.jar Bar), nhưng nó đã không làm việc cho tôi. Thay vào đó tôi đã ban hành lệnh trong thời gian biên dịch và sau đó thực hiện chương trình của tôi:

$ javac -cp /Library/Java/Extensions/mysql-connector-java-5.1.29-bin.jar FirstExample.java 
$ java FirstExample 

Và đây là những gì tôi nhận được ... truy vấn dữ liệu từ cơ sở dữ liệu của tôi:

Đang kết nối đến cơ sở dữ liệu ...
Tạo tuyên bố ... ID: 1, Tiêu đề: Đại diện bán hàng, Đầu tiên: Nancy, Lần cuối: Davolio
ID: 2, Tiêu đề: Phó chủ tịch, Bán hàng, Thứ nhất: Andrew, Last: Fuller ID: 3, Tiêu đề : Đại diện bán hàng, Thứ nhất: Janet, Lần cuối: Leverling
ID: 4, Tiêu đề: Đại diện bán hàng, Thứ nhất: Margaret, Lần cuối: Peacock
ID: 5, Tiêu đề: Người quản lý bán hàng, Thứ nhất: Steven, Lần cuối: Buchanan
ID: 6, Tiêu đề: Đại diện bán hàng, Thứ nhất: Michael , Lần cuối: Suyama
ID: 7, Tiêu đề: Đại diện bán hàng, Thứ nhất: Robert, Last: King
ID: 8, Tiêu đề: Điều phối viên bán hàng bên trong, Thứ nhất: Laura, Last: Callahan
ID: 9, Tiêu đề: Bán hàng Đại diện, Thứ nhất: Anne, Lần cuối: Dodsworth

Tạm biệt!

Hy vọng điều này sẽ giúp

+0

Điều đó không giải thích nơi để _install_ một lọ và ví dụ với cơ sở dữ liệu là khó hiểu. –

Các vấn đề liên quan