2009-02-21 21 views
27

Tôi đang làm công việc java trên một máy chủ lớp mà tôi không có gốc. Bất cứ khi nào tôi cố gắng biên dịch bằng cách sử dụng kiến, nó trỏ đến thư mục sai (/usr/tomcat thay vì /usr/tomcat/jre).Làm cách nào để thay đổi JAVA_HOME cho kiến?

Một trong những điều chúng tôi được yêu cầu làm khi thiết lập tài khoản người dùng của chúng tôi là thêm export JAVA_HOME=/usr/tomcat/jre vào tệp .bashrc. Tôi không biết liệu đó có phải là vấn đề để giải quyết vấn đề này hay không.

Vì vậy, làm cách nào tôi có thể thay đổi thuộc tính JAVA_HOME cho kiến ​​nhưng chỉ khi tôi chạy kiến?

EDIT: echo $JAVA_HOME điểm để /usr/tomcat/jre echo $JAVA_HOME\bin điểm để /usr/tomcat/jrebin

Vấn đề là khi tôi thường chạy ant tôi nhận được lỗi này:

Unable to locate tools.jar. Expected to find it in /usr/tomcat/lib/tools.jar 
Buildfile: build.xml 

compile: 
    [javac] Compiling 1 source file to /home/ejm244/build/classes 

BUILD FAILED 
/home/ejm244/build.xml:9: Unable to find a javac compiler; 
com.sun.tools.javac.Main is not on the classpath. 

Perhaps JAVA_HOME does not point to the JDK 

Total time: 0 seconds 
+0

Bạn đã đặt ANT_HOME chưa? – laz

+0

echo $ ANT_HOME trả về không có gì nên có thể không. Tôi sẽ xem xét nó nhưng mọi thông tin sẽ hữu ích. –

Trả lời

6

JAVA_HOME phải chỉ ở nơi JDK được cài đặt không không phải là JRE.

Vì vậy, nếu bạn nhập ls $ JAVA_HOME bạn thấy gì? nếu bạn làm ls $ JAVA_HOME/bin/bạn có thấy javac không?

Nếu lần đầu tiên không hoạt động thì bạn không có JAVA_HOME trỏ vào đúng thư mục. Nếu thứ hai không hoạt động thì bạn cần trỏ JAVA_HOME tại một JDK thay vì JRE.

+0

Tôi nghĩ rằng bạn có nghĩa là $ JAVA_HOME/bin/(dấu gạch chéo về phía trước) – wds

+0

ack - học sinh của tôi sử dụng các cửa sổ quá nhiều :-) Cảm ơn! – TofuBeer

+1

Bạn chính xác; tuy nhiên, "ant.java.nhà "tài sản sẽ * luôn luôn * trỏ đến một jre vì nó xác thịt rằng tài sản từ java.lang.System (mà theo định nghĩa là JRE theo JDK) .Để dứt khoát thiết lập môi trường Java trong kiến, xác định vị trí java bằng cách sử dụng $ { env.JAVA_HOME} với đường dẫn chính xác – ingyhere

9

Bạn có thể tạo tập lệnh của riêng mình để chạy kiến, ví dụ: tên là ant.sh như:

#!/bin/sh 
JAVA_HOME=</path/to/jdk>; export JAVA_HOME 
ant [email protected] 

và sau đó chạy tập lệnh của bạn.

$ chmod 755 ant.sh 
$./ant.sh clean compile 

hoặc bất cứ mục tiêu kiến ​​mà bạn muốn chạy

+1

bằng cách sử dụng 'jre' sẽ không hoạt động; nó không chứa các công cụ mà kiến ​​đang yêu cầu –

+0

@Carlos Heuberger: hoàn toàn đúng, tôi đã sửa chữa –

+2

Đã thử điều này, không ảnh hưởng đến kiến ​​JAVA_HOME –

5

Nhìn vào shell script cho gọi kiến, có thể là giá trị cho $ JAVA_HOME thiết lập cho vỏ của bạn trong .bashrc có thể được ghi đè trong các tập tin /etc/ant.conf, $ HOME/.ant/ant.conf và $ HOME/.antrc. Nếu bạn thực thi bash -x < đường dẫn đến ant script > nó sẽ phát ra thông tin gỡ lỗi sẽ giúp bạn theo dõi nơi $ JAVA_HOME đang bị ghi đè.

1

JAVA_HOME cần trỏ đến nhà JDK nếu bạn đang cố gắng biên dịch mã. Kiểm tra xem '/ usr/tomcat/jre/bin/javac' có tồn tại không. Tôi nghi ngờ nó.

Nếu bạn không có JDK, bạn có thể làm việc xung quanh nó bằng cách lấy thư viện ECJ (trình biên dịch eclipse), thả nó vào '~/.ant/lib' và thêm thuộc tính hệ thống vào dòng lệnh để sử dụng trình biên dịch đó - hãy xem hướng dẫn Ant để biết chi tiết.

http://ant.apache.org/

+0

của kiến Đọc thông báo lỗi đó cẩn thận hơn: Không thể định vị tools.jar.Được tìm thấy trong /usr/tomcat/lib/tools.jar Điều đó cho thấy JAVA_HOME thực sự là/usr/tomcat thay vì/usr/tomcat/jre. Đối với một số lý do, một giá trị không chính xác cho JAVA_HOME là ghi đè giá trị shell – laz

+0

@laz nó không thực sự quan trọng - nguyên nhân gốc rễ là O P đang cố gắng sử dụng JRE để chạy Ant, trong khi anh ta nên sử dụng một JDK, như được chỉ ra bởi nbeyer – eis

1

Khi sử dụng Bash chỉ cố gắng này:

$ export JAVA_HOME=/usr/tomcat/jre 
0

Bạn sẽ cần phải thay đổi con đường JAVA_HOME vào thư mục Java SDK thay vì thư mục Java RE. Trong Windows, bạn có thể thực hiện việc này bằng cách sử dụng lệnh set trong dấu nhắc lệnh.

ví dụ:

bộ JAVA_HOME = "C: \ Program Files \ Java \ jdk1.6.0_14"

4

Mở thiết lập máy tính Windows 7 của tôi:

 
JAVA_HOME="C:\Program Files\Java\jdk1.6.0_18" 

đã không làm việc. Nhưng thiết lập:

 
JAVA_HOME=C:\Program Files\Java\jdk1.6.0_18 

hoạt động.

+0

Cũng làm việc cho tôi. Cảm ơn! – Alexis

1

Đặt JRE trong dự án (thuộc tính dự án -> Đường dẫn xây dựng Java-> Thư viện, thường là mục nhập cuối cùng) hoặc mặc định chung trong các tùy chọn (Java-> JRE được cài đặt) thành JDK, không phải là JRE.

-1

java_home luôn trỏ đến jdk, trình biên dịch cung cấp cho bạn các lớp, và jre là cách mà trình duyệt của bạn hoặc bất kỳ lớp nào được biên dịch sao cho nó phải khớp giữa jdk và jre trong phiên bản.

+1

Tôi đã chỉnh sửa email của bạn cho mỗi câu hỏi này trên meta: http://meta.stackexchange.com/questions/89965/what-to-do-when-questioner-posts-email-address-for-responses Nói chung điều này cũng đi cho câu trả lời. – gary

3

Đặt env var: JAVACMD - đường dẫn đầy đủ của tệp thực thi Java. Sử dụng điều này để gọi một JVM khác với JAVA_HOME/bin/java (.exe).

tham khảo: http://ant.apache.org/manual/running.html

3

Mặc dù các biến môi trường JAVA_HOME thiết lập một cách chính xác, các ant có thể sử dụng JRE cấu hình bên trong mỗi build.xml hoặc bất kỳ xây dựng tập tin.

Để kiểm tra phiên bản nào của JRE mà kiến ​​đang sử dụng, hãy nhấp chuột phải vào tệp xây dựng -> chọn kiến ​​xây dựng hiển thị chi tiết về các tác vụ để chọn vv, chọn JRE mà bạn muốn sử dụng.

Nên sử dụng cài đặt cấp dự án hoặc chỉ ở cấp không gian làm việc.

0

thử với điều này:

/usr/sbin/update-alternatives --config java 
0

Khi chạy ant từ vỏ, bạn không cần phải export JAVA_HOME đầu tiên, trong đó sẽ thiết lập biến mà cho vỏ hiện tại của bạn và tất cả các lệnh trong tương lai, thay vì sử dụng

[email protected]:~# JAVA_HOME=/path/to/jdk ant targets 
2

có 2 cách thay đổi trình biên dịch:

  • export JAVA_HOME=/path/to/jdk trước khi bạn bắt đầu Ant.
  • Set <javac exectuable="/path/to/javac">

Một lựa chọn khác sẽ có thêm một tương ứng tools.jar vào classpath, nhưng con đường mà thường được thực hiện nếu Ant được bắt đầu từ một công cụ như Maven.

Để biết thêm chi tiết về (hoặc các tùy chọn khác) thay đổi trình biên dịch Java trong Ant, xem this article chẳng hạn.

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