2011-02-09 13 views
6

Đáng ngạc nhiên là tôi không thể tìm thấy câu trả lời cho câu hỏi này.Làm thế nào để xây dựng Java JRE từ nguồn (src.zip trong JDK)?

Tôi đang cố gắng xây dựng lại JRE java từ nguồn. Tôi lấy nguồn Java JRE bằng cách giải nén tệp src.zip trong JDK.

Sau khi thực hiện bất kỳ thay đổi nào tôi cần thực hiện cho JRE, làm cách nào để biên dịch lại nguồn mới thành tệp .java (sau đó tôi có thể nén nó vào tệp rt.jar).

Cảm ơn.

+0

Ý của bạn là gì sau khi thực hiện bất kỳ thay đổi nào tôi cần ' – Woot4Moo

+0

@ Woot4Moo, tôi chỉ đơn giản có nghĩa là sau khi chỉnh sửa nguồn của JRE, tôi muốn xây dựng lại phiên bản tùy chỉnh của tôi JRE. Ví dụ, tôi có thể chỉnh sửa Object.java để mỗi đối tượng có một trường khác hoặc một số chức năng đặc biệt. Tôi nhận ra có nhiều cách tốt hơn để làm điều này, nhưng tôi chỉ đưa ra một ví dụ. – Tom

+1

Bạn có nhận được bất kỳ ngoại lệ hoặc lỗi nào không ?? Bạn có thể đề cập đến cách tiếp cận của bạn? điều đó sẽ giúp người khác thấy điều gì đang xảy ra. – Favonius

Trả lời

1

Một số nguồn Java tạo thành rt.jar được tạo trong quá trình xây dựng , từ tập lệnh và các phương tiện khác. Một số tệp thuộc tính cũng được tạo theo cách này và một số tệp thuộc tính được chuyển thành nguồn Java cũng đóng góp cho rt.jar. Vì vậy, nếu không hoàn thành xây dựng trước tiên và điền vào thư mục 'gensrc' , bạn sẽ không có tất cả các tài nguyên tạo thành rt.jar .

Trích từ: http://www.java.net/forum/topic/jdk/java-se-snapshots-project-feedback/it-possible-just-build-rtjar

Vì vậy, khi bạn nói javac trên tất cả các file java bên trong src.zip nó sẽ không biên dịch như đồ thị phụ thuộc bị phá vỡ (thiếu tập tin được tạo)

Cũng hãy xem điều này: Where to get full source code for rt.jar?

+0

Cảm ơn. Chúng có ý nghĩa gì với một công trình hoàn chỉnh? Xây dựng nguồn C của JDK? – Tom

+0

@Tom: Cũng như từ liên kết, có vẻ như việc xây dựng hoàn chỉnh liên quan đến việc thực thi các tập lệnh để tạo ra mã đĩa nồi hơi và các tệp thuộc tính. Mặc dù tôi không chắc chắn những gì khác nó có thể liên quan. Sẽ tiếp tục cập nhật câu trả lời của tôi khi tôi nhận được một cái gì đó đáng để chia sẻ. – Favonius

3

Bạn có cơ hội tốt hơn khi sử dụng OpenJDK (cơ sở của JDK tương lai của Oracle/Sun). http://openjdk.java.net/

Nhưng bạn muốn thay đổi điều gì thực sự? Có thể có một cách tốt hơn ...

+0

Tôi e rằng OpenJDK không đủ (nó không hỗ trợ tất cả các ứng dụng java). Ngoài ra, điều này nên là một nhiệm vụ tầm thường, vì nguồn là ngay tại đó và chỉ phải được xây dựng. – Tom

+1

src.zip không chứa tất cả các nguồn và tôi không biết giấy phép cho phép. OpenJDK cần một số tệp nhị phân bổ sung không phải là mã nguồn mở, nhưng sau đó tất cả các ứng dụng sẽ chạy tốt. – Puce

1

Sau khi xem lại câu hỏi. Javac trên bất kỳ tệp nào trong số những tệp đó sẽ cho phép bạn xây dựng lại chúng. Ngoài ra, bạn không biên dịch các tệp .java thành các tệp .java mà chúng trở thành các tệp .class. Bạn có thể viết kịch bản ANT build để xử lý công việc nặng nề cho bạn.

+0

@ Woot4Moo, tôi sợ điều đó có nghĩa là để xây dựng nguồn C ở mức độ thấp. Tôi chỉ đơn giản nói về các tệp java cho tệp JRE rt.jar (nó nằm trong src.zip trong thư mục JDK, chứ không phải nguồn của JDK). – Tom

+0

@Tom ahh tôi hiểu rồi. – Woot4Moo

+0

Tôi nghĩ rằng điều này cũng dựa trên OpenJDK, phải không? – Puce

2

Nếu bạn muốn thay đổi một số lớp, bạn chỉ cần biên dịch các lớp đó. Bạn không cần phải biên dịch toàn bộ JDK trừ khi bạn dự định thay thế nó.

Nếu bạn chỉ muốn vá nó, hãy tạo một JAR của các lớp đã thay đổi của bạn và thêm lớp này vào đường dẫn lớp khởi động.

+0

Tôi đoán tôi có thể biên dịch mọi lớp mà tôi sửa đổi từng cái một. Nó làm tôi ngạc nhiên mặc dù có một thư mục nguồn mà dường như không thể xây dựng dễ dàng (?). – Tom

+1

Ý nghĩa của nó cho mục đích giáo dục. Giấy phép JDK không khuyến khích việc sửa đổi bất kỳ thư viện/lớp chuẩn nào (luật sư có thể có một cái nhìn mạnh mẽ hơn) Tuy nhiên, bạn có thể biên dịch OpenJDK từ đầu. –