금요일, 3월 29, 2013

Eclipse incremental build


요즘하는 알바인데, 그냥 묵히기는 아깝고 누군가에게는 피가되고 살이 되겠다 싶어서 남겨봅니다.


이클립스에서 빌드에서 등장하는 아이들은 다음과 같습니다.
- Builder : 워크스페이스의 특정 리소스가 변경되면 작업을 처리하도록 하는 것입니다.
- Marker : 워크스페이스의 특정 리소스를 연결(?) 시켜 놓은것을 말합니다.
--------------------------------------------------------------------------------------이클립스에서 incremental-build를 수행하기 위해서 동작하는 몇가지 용어는 다음과 같습니다.
제 컴파일은 org.eclipse.jdt.core 플러그인에서 동작합니다.
private void buildDeltas(SimpleLookupTable deltas) {
코드의 용어로는 풀빌드를 batch build라고하고, incremental build를 build delta라고 합니다.
그래서 결국에서는
그래서 결국에는 AA클래스를 수정했다고 하면, 소스 폴더에서 AA가 있는지 비교하여 있으면 컴파일하는 식으로 한느듯합니다.
수정될 것들을 다 모아서 결국에는 컴파일 합니다.
소스를 좀더 보기는 봐야할듯한데, 어느정도 빡셀듯하네요.
예전에 eclipse 소스 검색 쪽을 분석해 본듯한데, 파일을 열어서 일일이 검색하였는데, 같은식으로 일일이 검색하는 것으로 생각됩니다.

- Workspace : 이클립스의 작업공간
- Resource : 작업공간에서 접근하는 .java등의 리소스
- Project : 워크스페이스안에 작업관리 단위
- Nature : 프로젝트에서 특정 기능과 처리를 하도록 하는 연결 방식입니다. 
예를들어 자바프로젝트는 자바네이쳐(org.eclipse.pde.PluginNature), 
plugin 개발자는 plugin 네이쳐(org.eclipse.jdt.core.javanature)를 가지고 있습니다.
이클립스에서는 이것은 .project에서 관리 합니다.
<natures>
<nature>org.eclipse.pde.PluginNature</nature>
<nature>org.eclipse.jdt.core.javanature</nature>
</natures>

이클립스에서 이것은 .project에서 관리합니다.
<buildCommand>
<name>org.eclipse.jdt.core.javabuilder</name>
<arguments>
</arguments>
</buildCommand>

리소스의 error나 warning등을 표시해 줍니다.
이클립스에서 Windows->Show view -> marker에서 볼수 있는 것들입니다.

위에서 언급한 resource가 변경될때 이벤트를 관리하는데 등장하는 아이는 다음과 같습니다.
IResourceChangeEvent : 리소스 변경 이벤트
IResourceDelta : 리소스가 변경될때마다 변경시점을 기억하는 아이.
IResourceDeltaVisitor : 변경된 리소스를 처리하기 위하기 위한 인터페이스.

그 중에서 org.eclipse.jdt.internal.core.builder.JavaBuilder 클래스가 실제 일을 수행합니다.
protected IProject[] build(int kind, Map ignored, IProgressMonitor monitor) throws CoreException {
...
}
메소드에 코드를 풀빌드해야하는지 incremental build해야하는지 결정하게 됩니다.

...
}
메소드가 incrementa build를 합니다.


IncrementalImageBuilder의 public boolean build(SimpleLookupTable deltas)에서 처리합니다.

ReferenceCollection의 includes에서 그런것들을 처리합니다.(addAffectedSourceFiles();)



댓글 없음:

댓글 쓰기