2009-02-16 24 views
6

Tôi muốn biên dịch nhiều tệp java trong Ứng dụng của mình mà không cần khởi động lại Weblogic và Tomcat. Nếu không, quá trình này mất rất nhiều thời gian. Đối với điều này tôi đã nhận một Hotswap plugin in Eclipse, nhưng điều này không hoạt động trong tất cả các trường hợp. Nó nói nó hoạt động để biên dịch tập tin đơn lẻ. Ngay cả khi tôi sử dụng nó không hoạt động trong tất cả các trường hợp.Làm thế nào để biên dịch một/nhiều tệp java mà không cần khởi động lại máy chủ? Có bất kỳ plugin Eclipse nào giống nhau không?

Có cách nào khác để tôi có thể thực hiện việc này hoặc có bất kỳ plugin/tập lệnh/phần mềm nào khác có thể giúp tôi trong việc này không?

Nếu có một số nguồn mở, nó sẽ rất hữu ích.

Cảm ơn trước.

Trả lời

7

Một điều đang biên dịch các lớp, nhưng bạn cũng cần VM JAVA để tải lại các lớp và sử dụng chúng, được gọi là trao đổi nóng. Để có sự trao đổi nhanh nhất của các lớp, bạn sẽ cần một cái gì đó như javarebel. Nó cho phép bạn tải lại nhiều hơn types of code-changes nhiều hơn so với JVM thông thường. Nếu bạn chạy triển khai của mình ở chế độ phát nổ, bạn ở nhà miễn phí và có thể kiểm tra bất kỳ thay đổi mã nào trong một giây hoặc lâu hơn. Chúng tôi khá kiểm tra hướng, vì vậy tôi chỉ sử dụng javarebel trong giai đoạn ngắn khi tôi lắp ráp toàn bộ ứng dụng, nhưng nó hoạt động thực sự tốt.

+0

Cảm ơn. Tôi nghĩ rằng Java Rebel Có vẻ là tốt. Tôi phải kiểm tra nó. Điều duy nhất tôi quan tâm là nó không phải là một phần mềm miễn phí/Mã nguồn mở. Bạn có biết điều gì khác là phần mềm miễn phí/OpenSource không? Trong trường hợp câu trả lời của bạn là Không, Làm thế nào tốt là nó đủ khả năng để Java Rebel? – Techmaddy

+0

Không có lựa chọn thay thế * thực * nào khác của jdk hiện tại. Javarebel hoạt động tốt cho tôi, nhưng đó gần như là một câu hỏi riêng để tự trả lời. Nó không đắt tiền và có, nó có giá trị nó. – krosenvold

1

Tôi không biết Eclipse, nhưng tôi sử dụng Netbeans. Netbeans thực hiện điều này khá tốt. Phiên bản mới nhất thậm chí còn có tùy chọn để tự động biên dịch lại khi bạn lưu tệp java.

Tôi biết điều này không chính xác trả lời câu hỏi của bạn. Bạn có thể sử dụng cả Netbeans và Eclipse tùy thuộc vào phần nào của dự án bạn đang làm việc.

EDIT: Với Tomcat, bạn có thể tải lại ứng dụng web. Điều này thực sự chỉ hữu ích nếu Tomcat đang xem lớp mới. Nếu dự án của bạn được biên dịch vào thư mục build trước và sau đó WAR sẽ được tạo từ đó, bạn có thể vào Tomcat và cài đặt ứng dụng web và thay vì trỏ vào điểm WAR tại thư mục build.

Trong Tomcat, bạn có thể phải đặt một tệp cấu hình trang web dưới tomcat/conf/Catalina/localhost. Nội dung của tập tin này trông như thế này:

<?xml version="1.0" encoding="UTF-8"?> 
<Context docBase="C:/Projects/MyWebApp/build/web" path="/MyWebApp"/> 

Hướng dẫn tải lại ở đây: http://www.cs.ucl.ac.uk/teaching/java/tomcatfaq.html#changeservlet

Nếu bạn làm điều này một vài lần mặc dù Tomcat sẽ chạy ra khỏi bộ nhớ. Điều này là do một cái gì đó gọi là PermGenSpace. Đọc về nó nếu bạn muốn biết thêm. Giải pháp là tăng bộ nhớ JVM, PermGenSize (với -XX: MaxPermSize) và thỉnh thoảng khởi động lại Tomcat.

EDIT2: Nếu tải lại ứng dụng khiến bạn bị đăng xuất, bạn có thể dễ dàng lấy vùng chứa để tuần tự hóa dữ liệu phiên của bạn vào đĩa bằng cách thêm 'triển khai Serializable' vào một số lớp học của bạn. Sau đó, bạn không cần phải đăng nhập sau khi tải lại ứng dụng.

+0

Tôi không thể chuyển sang Netbeans. Nó sẽ là tuyệt vời nếu điều này có thể được thực hiện trong Eclipse. – Techmaddy

0

Tôi đoán tôi không thực sự thấy vấn đề ở đâu. Đây là những gì tôi làm và những thay đổi tải gần như ngay lập tức. Tôi có một kịch bản lệnh Ant để biên dịch các tệp .java và .jsp cho tôi, đặt chúng vào các thư mục thích hợp trong ứng dụng web và thay đổi tệp web.xml nếu cần thiết (hoặc ít nhất chạm vào nó để thông báo cho tomcat về các thay đổi). Nếu bạn cần trợ giúp khi làm bất kỳ điều gì với Ant, tôi rất sẵn lòng trợ giúp. Btw Tôi không sử dụng các tệp WAR để triển khai trên máy thử nghiệm của mình. Điều đó sẽ chậm hơn rất nhiều.

1

Tôi đồng ý rằng rất tẻ nhạt khi triển khai lại mọi lúc khi phát triển.

Tôi khuyên bạn nên xem xét MyEclipse trong đó có một cơ chế hotdeploy rất tốt hoạt động tốt với Tomcat, và đó là khá phải chăng và có 30 ngày dùng thử.

Cơ chế Java EE cổ phiếu trong Eclipse để triển khai lại máy chủ không còn nhanh.

2

Java HotSpot VM thực hiện điều này tự động, nhưng không phải trong mọi trường hợp ...

Trước tiên, bạn phải chạy một "debug" phiên, không phải là một "chạy" phiên.

Tiếp theo, một số thay đổi sẽ bắt đầu khởi động lại. Ý tưởng cơ bản là nếu giao diện để thay đổi lớp (phương pháp sigs, không phải là một giao diện Java thực tế), VM không thể thay thế nội dung lớp nội tuyến.

Bạn không cần plugin cho điều này, chỉ là VM gần đây.

Điều này xảy ra dưới nhiều hoàn cảnh như

  • phương pháp thêm
  • phương pháp loại bỏ
  • thay đổi phương pháp chữ ký
  • thay đổi hệ thống phân cấp lớp (superclasses, giao diện thực hiện)

Nó có thể cũng xảy ra nếu bạn giới thiệu một lỗi trong lớp. (Đối với các lỗi như dấu ngoặc nhọn không khớp)

Khi bạn lưu tệp Java, nhật thực sẽ biên dịch nó. Nếu có lỗi, nhật thực chèn một ngoại lệ ném để cho biết rằng có một lỗi biên dịch chưa được giải quyết. (Nó làm điều này vì vậy khi bạn chạy bạn không chỉ thấy biên soạn thành công cuối cùng, làm cho nó rõ ràng bạn có một lỗi biên dịch)

+0

Điều này đã cứu tôi, có vẻ như đã đủ để khởi động Tomcat ở chế độ gỡ lỗi. +1 –

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