2009-03-29 67 views
12

Tôi gặp sự cố khi chạy Ant với JDK 1.6 trên Mac OS X. Mặc dù các phiên bản ứng dụng Java được đặt thành Java SE 6 trong Tùy chọn Java của OS X, thực thi java -version trong Thiết bị đầu cuối cũng hiển thị java version "1.6.0_07", Ant vẫn có vẻ sử dụng JDK 1.5 để sử dụng JDK 1.5 vì nó không thấy các lớp JDK 1.6 khi biên dịch mã của tôi.Chạy Ant với JDK 1.6 trên Mac OS X

Tôi hiểu rằng Ant dựa vào biến môi trường JAVA_HOME để chỉ định JDK nào sẽ sử dụng. Tuy nhiên, tôi không hoàn toàn hiểu cách biến này có thể được đặt trên Mac OS X.

Do đó, câu hỏi của tôi là cách làm cho Ant chạy với JDK 1.6 trên Mac OS X. Nếu cách chính xác vẫn là đặt JAVA_HOME môi trường biến, cách đặt biến trên OS X.

Trả lời

21

Biến môi trường JAVA_HOME được đặt trong tệp .profile của thư mục chính của bạn. (/Users/ejel/.profile?) Chỉnh sửa và đặt nó theo ý bạn muốn. Ví dụ:

export JAVA_HOME=/System/Library/Frameworks/JavaVM.framework/Versions/1.6/Home 

Từ thời điểm này trở đi, mỗi khi bạn mở cửa sổ đầu cuối mới, nó sẽ có JAVA_HOME được đặt thành giá trị mới này. Nó sẽ không thay đổi với bất kỳ cửa sổ đang mở nào.

Nếu bạn thực sự rất kinh ngạc khi đặt điều này trong hồ sơ hoặc nếu nó xung đột với phần mềm khác, câu lệnh xuất luôn có thể được chạy trong thiết bị đầu cuối theo cách thủ công hoặc đi vào tập lệnh (ví dụ: setj6ev.sh) một lần trước khi bạn bắt đầu chạy các tác vụ kiến.

+0

Giải pháp được cung cấp thực sự đơn giản và hoạt động. Tuy nhiên, đường dẫn chính xác đến thư mục nhà Java phải là /System/Library/Frameworks/JavaVM.framework/Versions/1.6/Home – ejel

+0

Lỗi của tôi, không kiểm tra nó, sẽ chính xác, thankx –

+0

Lý tưởng nhất bạn nên sử dụng .. ./Versions/Current/Home để sau đó bạn có thể thay đổi ở giai đoạn sau VM là gì mà không cần phải cập nhật tập lệnh của bạn - hoặc vẫn tốt hơn, .../Phiên bản/CurrentJDK/Home nếu bạn cần nối vào những thứ như vd trình biên dịch – AlBlue

2

Đặt rõ ràng biến JAVA_HOME trong tệp .profile/.bashrc/.zshrc của bạn không thực sự là cách được khuyến nghị để thực hiện trên mac. Có những chương trình mà tôi đã nhìn thấy được đưa lên với một JAVA_HOME được thiết lập rõ ràng cho một phiên bản cụ thể (grails 1.1 với một số tài nguyên mùa xuân chẳng hạn).

Cách đúng để đặt phiên bản Java mà bạn muốn sử dụng là sử dụng ứng dụng/Ứng dụng/Tiện ích/Ứng dụng Java Preferences.app.

Trong đó, bạn kéo phiên bản java mà bạn muốn sử dụng lên trên cùng. Điều này sẽ cho phép phiên bản đó cho tất cả các ứng dụng (cả hai ứng dụng đó chạy từ dòng lệnh và các phiên bản được khởi chạy thông qua các quy trình GUI).

Bạn có thể kiểm tra phiên bản hiện tại bằng cách chạy này từ dòng lệnh:

java -version 

tôi không thực sự thích cách mà các mac xử lý toàn bộ các java symlinked thư mục và tập tin. Nó không rõ ràng và mọi người thường xuyên làm hỏng nó.

Xem apple developer page để biết thêm chi tiết.

+0

Như tôi đã đề cập trong câu hỏi của mình, tôi đã thiết lập phiên bản Java trong JavaPreferences.app. Thực thi "java -version" hiển thị "1.6.0_07". Tuy nhiên, Ant dường như không dựa vào tài sản này mà đúng hơn là thuộc tính JAVA_HOME env var. – ejel

+0

Xin lỗi, tôi đã bỏ lỡ điều đó trong bản gốc. Tôi nghĩ chắc chắn rằng điều này đã được kiểm soát bởi ứng dụng Java Preferences, nhưng một thử nghiệm nhỏ cho thấy rằng nó không phải là. Nó kiểm soát /System/Library/Frameworks/JavaVM.framework/Versions/Liên kết hiện tại, KHÔNG phải liên kết CurrentJDK. WTF là táo suy nghĩ? –

-1

Bạn có thể cần phải mở một cá thể lệnh nhắc mới để trình bao có thể nhận bất kỳ thay đổi nào đối với các biến môi trường.

3

Ted, bằng cách sử dụng ứng dụng Java Preferences không thay đổi liên kết tượng trưng CurrentJDK trong /System/Library/Frameworks/JavaVM.framework/Versions, đó là những gì Ant sẽ sử dụng nếu biến môi trường JAVA_HOME không được thiết lập. Do đó, bạn có thể thay đổi liên kết đó theo cách thủ công hoặc đặt biến môi trường JAVA_HOME, nhưng nếu bạn không làm như vậy, thì Ant sẽ không sử dụng đúng JDK.

Bạn có thể xem phiên bản của jdk mà Ant đang sử dụng bằng cách phát hành một thông báo echo < echo = "$ {ant.java.version}"/> trong tệp build.xml của bạn.

7

Tôi đã thêm dòng

export JAVA_HOME=`/usr/libexec/java_home` 

Để tập tin zshrc của tôi, nó dường như làm các trick (.bash_profile hoặc bất cứ điều gì nếu bạn sử dụng bash).

+0

Câu hỏi được hỏi về OSX, không có/usr/libexec/java_home. Trong mọi trường hợp, .zshrc là dành cho zsh; vỏ mặc định được bash trên OSX. – AlBlue

+1

Tôi đang ở trên OS X, ở đó. – Theo

2

tôi cố gắng tất cả mọi thứ, và chỉ có một điều làm việc cho tôi: bỏ liên kết CurrentJDK, và liên kết đến 1.6:

cd /System/Library/Frameworks/JavaVM.framework/Versions 
sudo unlink CurrentJDK 
sudo ln -sF "1.6" CurrentJDK 

Cuối cùng tôi nhận được:

java -version 
java version "1.6.0_22" 

Tôi hy vọng sự giúp đỡ này.