2011-02-23 3 views
4

증분 빌드에 javac를 사용할 때 런타임 오류가 발생하는 것 같습니다. 이 유형의 워크 플로가 지원됩니까? 예를 들어, A.javaB.java에 종속되고 B.java이 수정되는 경우, 종속성이 변경 되었기 때문에 A.java을 javac에서 다시 컴파일합니까?종속성이 바뀌면 javac를 소스 파일을 다시 컴파일하는 방법은 무엇입니까?

는 지금은 컴파일에 대한 javac의 개미 빌드 작업을 사용하고 있습니다 :

당신이 개미를 사용하고 있기 때문에
<javac destdir="${classes.dir}" 
      srcdir="${src.dir}" 
      source="${javac.version}" 
      debug="${javac.debug}" 
      deprecation="${javac.deprecation}" 
      includeantruntime="build.sysclasspath=last"> 
     <classpath refid="compile.classpath" /> 
     <classpath refid="junit.classpath" /> 
    </javac> 

답변

0

B.java에서 변경된 사항에 따라 다릅니다. 클래스가 A에 제시된 방법에 영향을주는 변경이없는 경우, javac는 A.java를 재 컴파일하지 않아도 변경 내용이 적용됩니다.

이전 코드가로드되고 실행되고 있다고 생각되는 곳에서 동작이 발생하는 경우 컴파일/패키징 프로세스가 컴파일 프로세스보다 의심 스럽습니다. YMMV.

5

javac 명령 줄 컴파일러는 명령 줄에서 제공되는 모든 소스 파일을 컴파일하고 최신 클래스 파일이없는 경우 해당 파일을 모두 컴파일합니다.

개미 javac 작업은 항상 모든 것을 컴파일하는 것을 피하기 위해 조금 더 똑똑해 지려고 시도합니다. 변경된 파일 (즉, 해당 클래스 파일보다 최신 파일) 만 다시 컴파일합니다. 어떤 클래스의 종속성이 변경되어 다른 클래스도 다시 컴파일해야하는 경우에는주의를 기울이지 않습니다.

내 현재 프로젝트에서 모든 클래스 파일을 삭제하는 테스트 및 프로덕션 배포 전에 문제가 발생할 때마다 간단히 ant clean을 수행합니다. 그러나 vanza가 말했듯이, depend 작업은 변경된 클래스에 의존하는 모든 클래스를 찾아 삭제하는 작업입니다. javac 작업 전에이 작업을 실행하면 좋을 것입니다.

관련 문제