2013-05-14 20 views
13

Được rồi, tôi đang sử dụng Ant phiên bản 1.7.1 (cài đặt mặc định) trên CentOS 6.3:Ant đặt 'java.home' của nó ở đâu (và có sai) và nó có phải gắn thêm '/ jre' không?

[theus[email protected] ~]$ ant -version 
Apache Ant version 1.7.1 compiled on August 24 2010 
[[email protected] ~]$ cat /etc/*-release 
CentOS release 6.3 (Final) 

Tôi có JAVA_HOME bộ và tôi chạy ant:

[[email protected] ~]$ export JAVA_HOME=/usr/java/jdk1.7.0_17 ; echo $JAVA_HOME ; 
/usr/java/jdk1.7.0_17 
[[email protected] ~]$ ant -diagnostics | grep java\\.home 
java.home : /usr/java/jdk1.7.0_17/jre 

Đây là niềm vui nhiều hơn:

[[email protected] ~]$ export JAVA_HOME=/a/fools/folly ; echo $JAVA_HOME ; ant -diagnostics | grep java\\.home 
/a/fools/folly 
java.home : /usr/java/jdk1.7.0_17/jre 
[[email protected] ~]$ env | grep JAVA 
JAVA_HOME=/a/fools/folly 

Vì vậy, tôi làm được một điều - rõ ràng Oracle's Java 7 Javadoc for Class System là WRONG nơi mà nó mô tả các(kinh ngạc!)Thuộc tính hệ thống là "thư mục cài đặt Java". Tôi biết rằng vì Java(TM) Tutorials for System Properties mô tả thuộc tính hệ thống java.home là "Thư mục cài đặt cho môi trường chạy Java (JRE)". Nói cách khác, JAVA_HOME trong môi trường không nhất thiết phải bằng java.home trong Thuộc tính hệ thống JVM. (Điều gì đặt ra?)

CÂU HỎI: Làm cách nào và như thế nào Ant nhận/đặt thuộc tính hệ thống java.home?

+0

Vâng, giá trị "java.home" được báo cáo bởi Ant thực sự trực tiếp từ java.lang.System. Mã bắt đầu trên dòng 328 trong lớp Chẩn đoán của Apache Ant 1.7.1. Vì vậy, đây thực sự là một câu hỏi Java. – ingyhere

+0

Bạn có tìm thấy giải pháp cho việc này không? – givanse

+3

Có, bạn có thể làm việc xung quanh nó bằng cách truy cập thuộc tính môi trường hệ thống trong Ant bằng $ {env.JAVA_HOME}. Cách khác, chỉ định java trong Nhiệm vụ Javac bằng cách thiết lập thuộc tính thực thi cho đường dẫn javac và thuộc tính ngã ba là có (xem Tài liệu tác vụ Javac của Ant). Bạn cũng có thể thay đổi cách các JVM được nhận diện trong hệ thống bằng cách làm theo hướng dẫn này, sau đó Ant sẽ khởi chạy với JVM thích hợp: http://www.if-not-true-then-false.com/2010/install-sun- oracle-java-jdk-jre-7-on-fedora-centos-red-hat-rhel /. – ingyhere

Trả lời

13

Thực sự là một internals JVM câu hỏi

Kể từ Ant chỉ là lặp lại các thuộc tính java.lang.System (xem bình luận trên dưới bài gốc), đây thực sự là một câu hỏi JVM. Java HotSpot Virtual Machine là trình thông dịch chính. Mã có sẵn trực tuyến tại hg.openjdk.java.net.

On line 309 of the C++ code for HotSpot (os_linux.cpp) có phương thức init_system_properties_values() trong lớp os. Nó có một số heuristics nhẹ để loại sniff ra vị trí cho một biến có tên là home_path mà kết thúc được thiết lập để những gì người dùng Java xem là "java.home". Nhận xét trong mã cho biết rằng '<java_home>/jre' đang được chính thức chỉ định làm giá trị thuộc tính java.lang.System cho "java.home" (trong trường hợp cài đặt JDK).

0

Tôi đã cài đặt JDK trên hộp Windows trong d: \ jdk nhưng chạy d: \ jdk \ bin \ java.exe với -XshowSettings cho thấy java.home được cài sẵn của nó trỏ đến cài đặt JRE toàn hệ thống trong c: \ Program Files \ Java \ jre1.8.0_91. Tôi nghi ngờ rằng tôi đã hỏng cài đặt của mình bằng cách xóa d: \ jdk \ jre mà không hiểu vai trò của JRE riêng tư so với JRE công khai.

+0

Java 8 cài đặt hơi khác so với các phiên bản trước đó. Để kiểm soát nhiều hơn các tập tin thực thi vì lý do bảo mật, Oracle cài đặt java.exe, javaws.exe và javaw.exe trong thư mục% WINDOWS% \ system32. Ngoài ra, đường dẫn được mã hóa cứng thành một tệp dữ liệu tại C: \ programdata \ Oracle \ Java \ javapath. Xem câu trả lời tại http://stackoverflow.com/questions/26324486/properly-installing-java-8-along-with-java-7 để biết thêm thông tin. Vì vậy, tôi không thực sự nghĩ rằng đây là một vấn đề cụ thể Ant. – ingyhere

+0

Tôi không dựa vào% PATH% để thực thi java.exe trong JDK hỏng của tôi cài đặt. Đó là một trong hai việc xóa d: \ jdk \ jre của tôi hoặc cài đặt JDK 64 bit trên đầu trang của phiên bản 32-bit khiến cho d: \ jdk \ bin \ java.exe tìm kiếm nguồn của trang chủ ở nơi khác (trong đăng ký, tôi đoán). –

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