2012-04-24 27 views
6

Tôi đang sử dụng dcevm + run-jetty-run + livereload, cố gắng phát triển ứng dụng web mà không cần khởi động lại cầu cảng khi sửa đổi nguồn java.Làm thế nào để cho cầu nối chặn yêu cầu khi tải lại các lớp đã sửa đổi?

Mọi thứ hoạt động tốt. Khi tôi sửa đổi một lớp java, tải trọng theo dõi sự thay đổi, và kích hoạt trình duyệt làm mới các trang đã mở để xem kết quả đã sửa đổi.

Nhưng tôi thấy nó vẫn không thuận tiện: Khi tải lại trình duyệt, dcevm và cầu tàu có thể chưa tải lại các lớp đã sửa đổi đó. Tôi phải làm mới lại trang theo cách thủ công, nhưng tôi không chắc liệu nó có hiển thị kết quả đã sửa đổi lần này hay không mà không kiểm tra nội dung một cách cẩn thận.

Vì vậy, tôi tự hỏi là có bất kỳ cách nào để cho cầu nối chặn yêu cầu khi tôi sửa đổi một số lớp và dcevm đang tải lại. Nó sẽ đảm bảo các trang được hiển thị luôn được sửa đổi.

Trả lời

1

Có thể quá khó khăn đối với khẩu vị của bạn, nhưng bạn có thể chèn đoạn mã khởi tạo tĩnh trong nguồn Java của mình để cập nhật tệp riêng biệt đã biết sau khi tải lại. Hơn ganeload có thể xem tập tin riêng biệt thay vì cho phép nó làm việc trực tiếp trên .java nguồn.

Nội dung nào đó dọc theo dòng:

public class ReloadUtils { 
    public static void notifyUpdate(String className) { 
    String baseDir = System.getProperty("DEV_MODE_BASEDIR") + "/"; 
    File file = new File(baseDir + className + ".updated"); 
    FileWriter fw = new FileWriter(file.getAbsoluteFile(), false); // overwrite instead of append 
    BufferedWriter bw = new BufferedWriter(fw); 
    bw.write(Long.toString(System.currentTimeMillis())); 
    bw.close(); 
    } 
} 

public class Reloadable { 

    private final static boolean DEV_MODE = System.getProperty("DEV_MODE").equals("true"); 

    static { 
    // static finals trigger most compilers to remove the statements in this case 
    if (DEV_MODE) { 
     ReloadUtils.notifyUpdate(Reloadable.class.getName()); 
    } 
    } 

    /* lots of useful stuff */ 
} 
Các vấn đề liên quan