lớp javac1.8 không tìm thấy


80

Tôi đã cài đặt hai jdks - jdk 1.5 và jdk 1.8. Tôi có tệp cấu hình Ant build.xml sau:

<target name="compileCustomSrc">
    <javac srcdir="src" destdir="build/classes" source="1.5" target="1.5" >
        <classpath>
            <fileset dir="C:/lib/">
                <include name="*.jar" />
            </fileset>
        </classpath>
    </javac>
</target>

Trước khi cài đặt jdk1.8, Ant được gọi từ Eclipse đã biên dịch tất cả các nguồn thành công. Nhưng bây giờ, tôi có thông báo lỗi sau:

Không tìm thấy lớp: javac1.8

JAVA_HOME và JRE_HOME của tôi:

JAVA_HOME = C: \ Program Files (x86) \ Java \ jdk1.5.0_16
JRE_HOME = C: \ Program Files (x86) \ Java \ jre1.5.0_16

và đặt trong Eclipse JRE thành 1.5. Java 1.8 có đặt một số cấu hình trong khi cài đặt không?

Câu trả lời:


173
Không tìm thấy lớp: javac1.8

Lỗi này được biết là xảy ra với các phiên bản Apache Ant nhỏ hơn 1.9.0 - không tương thích với Java 8. Nếu bạn đang sử dụng phiên bản Ant <1.9.0, bạn nên cập nhật lên bản phát hành 1.9.x.

Đây là báo cáo lỗi liên quan: https://issues.apache.org/bugzilla/show_bug.cgi?id=53347

Btw, nếu bạn chỉ muốn biên dịch với Java 8, nhưng không cần biên dịch bất kỳ cú pháp Java 8 thực tế nào, thì bạn có thể chuyển đối số sau cho javac như một giải pháp thay thế , điều này sẽ cho phép bạn tiếp tục sử dụng phiên bản cũ hơn của Ant :

-Dbuild.compiler=javac1.7

9
Tôi đã gặp phải vấn đề này và cờ đã cho ( -Dbuild.compiler=javac1.7) cũng hoạt động khi được chuyển trực tiếp đến ant.
cincodenada

Câu trả lời của Kristian là đúng, chúng tôi có thể thêm -Dbuild.compiler = javac1.7 khi tạo cấu hình chống khởi chạy trong eclipse, hãy xem < bug.eclipse.org/bugs/show_bug.cgi?id=409358 >
Shiva Achari

5
Tôi đã tìm thấy . Họ đang kiểm tra xem bạn đang sử dụng Java 1.3 trở xuống. Mã cũ, cũ từ hơn một thập kỷ trước. Vì điều này, Ant sẽ phá vỡ mỗi khi Oracle ra mắt phiên bản 1.x mới. Ant đã yêu cầu 1,4 hoặc cao hơn. Họ chỉ nên xóa kiểm tra này khỏi mã.
David W.

3
@ David W - tại sao họ không thêm hỗ trợ cho Java 1.9 và 2.0 để các thay đổi hoạt động trong 6 hoặc 8 năm tới. Java 9 sẽ sớm ra mắt và mọi thứ sẽ lại bùng phát ....
jww

2
Lỗi đã được sửa vào năm 2012 cho Ant 1.9.0 của Eclipse nhưng Ant trong Eclipse Kepler (2014!) Vẫn ở mức 1.8.4 và do đó vấn đề này vẫn tồn tại. Điều này được nâng cấp trong Luna hay chúng ta vẫn đang chờ đợi? (Tôi tìm thấy trang web của Eclipse hoàn toàn vô dụng cho bất kỳ loại theo dõi sự thay đổi phù hợp và biết những gì phiên bản của plugin gì đi vào phát hành những gì; là thế này có ở đâu không?)
Stuart Rossiter

14

Để theo dõi câu trả lời của Kristian Holdhus (được đánh dấu là đúng), thay vào đó bạn có thể sử dụng compilerthuộc tính trong nhiệm vụ Ant javac . Cài đặt compiler="modern"phải tương thích cả về phía sau (ngược lại như 1.3) và tương thích về phía trước.

Điều này tránh sự cần thiết phải đặt tên thuộc tính Hệ thống Java build.compiler. Chỉ trong trường hợp không đặt compilerthuộc tính cho javacnhiệm vụ một cách rõ ràng , Ant mới sử dụng giá trị của build.compilerlàm dự phòng.


Tôi chắc chắn đã tán thành câu trả lời của Kristian Holdus. Tuy nhiên, tôi thấy đây là một giải pháp tốt hơn cho tình huống của tôi. Bằng cách buộc người gọi thêm tham số -D, chúng tôi đang gây khó khăn cho việc gửi build.xml cho người dùng bên ngoài. Chúng tôi cũng cần phải cung cấp hướng dẫn sử dụng bổ sung, đó là luôn luôn thấp hơn thì càng tốt :)
Rakesh N

nó hoạt động, hiển thị ghi chú khi xây dựng, [javac] warning: C:\Program Files\Java\jre1.8.0_152\lib\rt.jar(java/net/ConnectException.class): major version 52 is newer than 51, the highest major version supported by this compiler. [javac] It is recommended that the compiler be upgraded.v.v.
aswzen

7

tôi đã có vấn đề tương tự. Tôi đã đặt đúng JAVA_HOME và JRE_HOME. Tôi cũng có Ant> 1,9.

Những gì tôi đã làm để sửa nó là vào Eclipse để Window -> Preferences. Mở rộng Ant và chọn Runtime. Theo mặc định, tab Classpath sẽ được chọn và ở phía bên tay phải có một nút gọi là "Ant Home". Nhấp vào nút này và kiểm tra kỹ nó được trỏ đến thư mục Ant của bạn.


3
JAVA_HOME = C:\Program Files (x86)\Java\jdk1.5.0_16
JRE_HOME = C:\Program Files (x86)\Java\jre1.5.0_16

JAVA_HOME và JRE_HOME của bạn được đặt thành cài đặt Java 1.5 do đó javackhông tìm thấy tệp nhị phân 1.8 (như ). Đặt chúng thành cài đặt Java 1.8 và bạn sẽ ổn.


Nhưng tôi không muốn sử dụng jdk1.8. Tại sao Ant cố gắng sử dụng trình biên dịch 1.8 với cài đặt này?
kamilz

1
Chạy bản dựng Ant với "Run As"> "Ant Build ..." sau đó mở tab "JRE" và chọn "Runtime JRE" bạn muốn sử dụng để chạy tập lệnh.
Toni Toni Chopper

Tác vụ "javac" có thể tạo mã byte cho các vms cũ hơn, Xem thuộc tính "target" trong doco: ant.apache.org/manual/Tasks/javac.html Java 1.5 không thể tạo bytecode cho các máy ảo sau này.
Mark O'Connor

2

Tôi đã thử nó với Eclise và gặp lỗi tương tự Class not found: javac1.8

Tôi đã xác minh phiên bản ANT trên hệ thống của mình

> ant -version

Apache Ant (TM) phiên bản 1.9.6 được biên dịch vào ngày 29 tháng 6 năm 2015

Khi tôi cố gắng chạy build.xml từ dấu nhắc lệnh, nó đã hoạt động. Sau đó, tôi kiểm tra rằng trong Eclipse, nó đề cập đến phiên bản cũ hơn của ANT.

Tôi chỉ đơn giản là chỉnh sửa đường dẫn ANT HOME trong Eclipse và nó cũng hoạt động từ đây. :)

Dưới đây là hình ảnh từ nơi cần chỉnh sửa Đường dẫn ANT trong Eclipse.

  1. Nhấp chuột phải vào tệp build.xml
  2. Chạy như
  3. Cấu hình công cụ bên ngoài
  4. Chọn tab classpath

Bây giờ thay đổi đường dẫn ANT Home từ đây.

nhập mô tả hình ảnh ở đây


Bạn đã thay đổi đường dẫn ANT Home thành gì?
IgorGanapolsky

1
Xin chào @IgorGanapolsky Trước đó, đường dẫn phiên bản Ant dành cho Ant 1.8 mà tôi đã cập nhật lên phiên bản Ant mới nhất 1.9 như trong hình trên. Va no đa hoạt động. Hy vọng tôi đã trả lời câu hỏi của bạn.
KulDeep

1

Cập nhật bản phát hành Ant lên 1.9.x dưới dạng Java 8 không tương thích với phiên bản Ant nhỏ hơn 1.9


0

Tôi đã thử tất cả các giải pháp khác, nhưng không có giải pháp nào hiệu quả. Cuối cùng tôi đã tìm thấy một cách tiếp cận phù hợp với tôi trong Eclipse:

  • Nhấp chuột phải vào tên nhiệm vụ kiến, ví dụ: "compileCustomSrc" trong antcửa sổ.
  • Chọn Run As | External Tool Configurations
  • Sau đó, trên JREtab, chọn Separate JRE: Java SE7hoặc bất kỳ tên java 7 của bạn, sau đó nhấn Applyvà sau đó Run.

Nhiệm vụ kiến ​​của bạn sẽ được thực hiện và sẽ xây dựng chính xác!


0

Cập nhật bản phát hành Ant lên 1.9.x dưới dạng Java 8 không tương thích với các phiên bản Ant nhỏ hơn 1.9 hoặc sau khi đặt comand -Dbuild.compiler = javac1.7, hãy xem bên dưới:

ant release -Dbuild.compiler = javac1.7



0

Đôi khi sự cố trong khi xây dựng cuộc chiến thông qua ANT cũng liên quan đến phiên bản java bị bỏ sót trong tệp build.properties khi build.XML cố gắng sử dụng phiên bản java được đề cập trong thuộc tính build.compiler

kiểm tra xem thuộc tính build.compiler có giống với phiên bản java dự kiến ​​hay không.


0

Bạn có thể tải xuống phiên bản mới hơn của eclipse, bao gồm phiên bản Ant mới hơn trong thư mục plugin. Sau đó, sao chép Ant jar vào thư mục plugin của eclipse cũ hơn. Eclipse sẽ tự động trỏ đến phiên bản Ant mới hơn. Điều này đã làm việc cho Kepler cũ hơn với Mars2 mới hơn cho tôi.


0

Tôi đã từng gặp vấn đề tương tự. Và tôi đã có thể giải quyết nó trong build.xml bằng cách đặt thuộc tính.

<property "build.compiler=javac1.7">
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.