금요일, 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();)



화요일, 3월 19, 2013

요즘 올챙이와 한금이는 - 13.03.19

올챙이는 드디어 1.0.0 버전을 만들기 시작했습니다.
개인적으로는 2014년에나 1.0.0을 가려고 했으나, 1년은 더 빠른 결정이고.. 1년의 공백을 매꾸기위해 더 노력해야 하려나 봅니다.

0.0.8 버전이 올챙이의 가능성을 보는 것이었어요.
1.0.0 버전은 올챙이가 상업적으로도 가능성을 보려고 합니다.

요즘 하고 있는 일은 대략
- 1.0.0 이름과 라이선스 정하기
- 기능목록 정하기
-- cloud시스템에서 사용할 수 있도록 open api 추가
-- 관리 및 보안 기능 강화
-- 에디터 기능 강화
-- 확장 가능한 api 추가
- 관련 회사설립(?)등의 일을 하는 것입니다.

지금까지 올챙이가 가장 크게 어려웠던 것은 기존에 존재하는 DB Client Tool들과의 비교 이었다고 생각이듭니다.  올챙이는 기존의 툴들과는 사용과 쓰임이 다르다고 생각해요.  
그래서 클라이언트 툴이 아니라 DB의 Hub가 되고 싶습니다.  물런 기능중에 Client Tool이 들어 가겠지만, 그것만이 아니라는 것이지요.

--- 
조만간 한장의 그림으로 올챙이 1.0.0을 표현해봐야겠어요
---

이런 작업을 4월말까지 계획하고 있습니다.
구현하고 싶은 기능은 너무 많고, 하고 싶은 것들도 너무 많네요.