2012-04-24 8 views
6

dcevm + run-jetty-run + livereload을 사용하고 있습니다. 자바 소스를 수정할 때 부두를 다시 시작하지 않고 웹 응용 프로그램을 개발하십시오.수정 된 클래스를 다시로드 할 때 부두가 요청을 차단하도록하는 방법은 무엇입니까?

모두 정상적으로 작동합니다. Java 클래스를 수정하면 livereload가 변경 사항을 모니터링하고 열린 페이지를 새로 고치면 수정 된 결과를 볼 수 있습니다.

그러나 브라우저가 다시로드 될 때 dcevm 및 jetty가 아직 수정 된 클래스를 다시로드하지 않았을 수 있습니다. 페이지를 수동으로 다시 새로 고쳐야하지만 이번에는 내용을 신중하게 확인하지 않고 수정 된 결과가 표시되는지 확실하지 않습니다.

그래서 일부 클래스를 수정하고 dcevm을 다시로드 할 때 부두가 요청을 차단하도록하는 방법이 있는지 궁금합니다. 표시된 페이지가 항상 수정되는지 확인합니다.

답변

1

어쩌면 당신의 입맛에는 너무 해킹 될지 모르지만, 자바 소스에 정적 초기화 스 니펫을 삽입하여 다시로드 한 후에 알려진 별도의 파일을 업데이트 할 수 있습니다. livereload는 .java 소스에서 직접 작동하도록하는 대신 별도의 파일을 볼 수 있습니다.

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 */ 
} 
:의 라인을 따라

뭔가