3장 이클립스 기반구조 eclipser

15
3장 이클립스 기반구조 Eclipser

Upload: brodiebrodie

Post on 03-Jul-2015

273 views

Category:

Documents


2 download

TRANSCRIPT

Page 1: 3장 이클립스 기반구조 eclipser

3장 이클립스 기반구조

Eclipser

Page 2: 3장 이클립스 기반구조 eclipser

[ 그림 3-1 ]

3.1 기반구조 개요

• 플러거블한 구조• eclipser의 아키텍처• 플러긴 로더에의한 실행

*다소작은 커널이라고함

Page 3: 3장 이클립스 기반구조 eclipser

<plugin><extension

point="org.eclipse.ui.views"><category

name="Quality Eclipse"id="com.qualityeclipse.favorites">

</category><view

name="Favorites"icon="icons/sample.gif"category="com.qualityeclipse.favorites"class="com.qualityeclipse.favorites.views.FavoritesView"id="com.qualityeclipse.favorites.views.FavoritesView">

</view></extension><extension

point="org.eclipse.help.contexts"><contexts

file="contexts.xml"></contexts>

</extension></plugin>

3.1.1 플러그인 구조

• 수많은 플러그인 load• 두가지파일로 이루어짐• 최초로딩시 필요한것만• 별도의 구조체로만듬

[ plugin.xml ]

Manifest-Version: 1.0Bundle-ManifestVersion: 2Bundle-Name: FavoritesBundle-SymbolicName: com.qualityeclipse.favorites;singleton:=trueBundle-Version: 1.0.0.qualifierBundle-Activator: com.qualityeclipse.favorites.ActivatorBundle-Vendor: QUALITYECLIPSERequire-Bundle: org.eclipse.ui,

org.eclipse.core.runtimeBundle-RequiredExecutionEnvironment: JavaSE-1.7Bundle-ActivationPolicy: lazy

[ MANIFEST.MF ]

Page 4: 3장 이클립스 기반구조 eclipser

3.1.2 작업공간(?)

• 이클립스 IDE는 workspace에 있는 파일을 출력하고 수정한다. • 사용자 파일과 환경설정파일• 환경파일

- 이클립스IDE나 플러그인- 정적플러그인 소스- 플러그인 구성파일여러 작업공간에서 공유가능

Page 5: 3장 이클립스 기반구조 eclipser

3.2 플러그인 디렉토리와 JAR파일

•플러그인이 생성되면 ,export하면1) 플러그인 디렉토리2) 단일 JAR형태

2가지 입니다.• example)디렉토리명-------------------------------------com.qualityeclipse.favorites_1.0.0. jar

------suffix를 붙인다.

3.2.1 링크파일

• 다른위치에 두고 링크파일로서 제공하기도함example)

c:/eclipse/link/com.qualityeclipse.favorites.link 생성내용 : path = c:/QualityEclipse/Favorites

Page 6: 3장 이클립스 기반구조 eclipser

3.2 플러그인 내역서

•Platform Plug-in Developer Guide > Reference > Other reference information

Page 7: 3장 이클립스 기반구조 eclipser

Manifest-Version: 1.0Bundle-ManifestVersion: 2Bundle-Name: FavoritesBundle-SymbolicName: com.qualityeclipse.favorites;singleton:=trueBundle-Version: 1.0.0.qualifierBundle-Activator: com.qualityeclipse.favorites.ActivatorBundle-Vendor: QUALITYECLIPSERequire-Bundle: org.eclipse.ui,

org.eclipse.core.runtimeBundle-RequiredExecutionEnvironment: JavaSE-1.7Bundle-ActivationPolicy: lazy

3.3.1 플러그인 선언

Page 8: 3장 이클립스 기반구조 eclipser

Manifest-Version: 1.0Bundle-ManifestVersion: 2Bundle-Name: FavoritesBundle-SymbolicName: com.qualityeclipse.favorites;singleton:=trueBundle-Version: 1.0.0.qualifierBundle-Activator: com.qualityeclipse.favorites.ActivatorBundle-Vendor: QUALITYECLIPSERequire-Bundle: org.eclipse.ui,

org.eclipse.core.runtimeBundle-RequiredExecutionEnvironment: JavaSE-1.7Bundle-ActivationPolicy: lazy

3.3.1 플러그인 선언

[ MANIFEST.MF ]

Help –AboutEclipse sdk-plugindetail

Plugin - Class

Page 9: 3장 이클립스 기반구조 eclipser

3.3.1 플러그인 선언

Export-Package: com.qualityeclipse.favorites.viewsImport-Package: javax.servlet.http;version="2.6.0"(?)Bundle-ClassPath: favorites.jar, .

• bundle-Classpath에는 플러그인에 포함된 라이브러리를 콤마로 구분해 나열• bundle-Classpath에서 지정한 라이브러리를 다른 플러그인에서 접근할수 있게 지정하려면 Export-Package로 쓰면됨

3.3.1 플러그인 런타임(?) Tip 플러그인을 단일 JAR형태로 전달할 때는 클래스가 플러그인 내의 JAR에들어있는 것이 아니라 플러그인 JAR에 들어있으므로 Bundle-ClassPath선언은빈채 둬야 한다.( . 도 포함되어야한다.)

3.3.2 플러그인 종속성

• Dependencies Tab에서 플러그인을 선택하여 Properties를 통해 설정변경가능

•Example ) 옵셔널 과 3.0.X버전필요할시

Require-Bundle: org.eclipse.core.runtime, org.eclipse.ui;resolution:=optional;bundle-version=“[3.0.0,3.1.0)”

Page 10: 3장 이클립스 기반구조 eclipser

3.3.4 확장과 확장점

<plugin><extension

point="org.eclipse.ui.views"><category

name="Quality Eclipse"id="com.qualityeclipse.favorites">

</category><view

name="Favorites"icon="icons/sample.gif"category="com.qualityeclipse.favorites"class="com.qualityeclipse.favorites.views.FavoritesView"id="com.qualityeclipse.favorites.views.FavoritesView">

</view></extension><extension

point="org.eclipse.help.contexts"><contexts

file="contexts.xml"></contexts>

</extension></plugin>

• 기존플러그인을 확장점을 제공하여 사용자가 적절하게 확장가능• 카테고리 ID를 사용해 Favorites뷰가 소속될 카테고리를 지정함

• 사용법 xml상에서 RightClick – show definitionor Help – Help contents

Page 11: 3장 이클립스 기반구조 eclipser

3.4 플러그인 클래스(bundle – activator)

• 플러그인이 로딩되었음을 전달 받는 첫번째 클래스플러그인이 종료되었음을 전달 받는 마지막 클래스

• 시동과 종료를 알아서 정보를 저장할수있음

3.4.2 플러그인 이른 시동하기

• 리소스 변경 정보를 플러그인에 제공하는 경우가 있음- org.eclipse.ui.startup의 확장, org.eclipse.ui.Istartup를 구현후 earlyStartup()

• 9.5장 늦은로딩시에 변경사항을 큐에 넣어뒀다 전달받는 방법 있음

Page 12: 3장 이클립스 기반구조 eclipser

3.4.3 정적 플러그인 리소스

• 리소스 파일은 본질적으로 정적 컨텐츠이며 여러 워크벤치 인스턴스에서 공유함• find(Ipath path) : 주어진 경로에 대한 URL을 반환• openStream(Ipath file) : 지정된 파일에 대한 입력 스트림을 반환한다.

3.4.4 플러그인 환경설정

• 플러그인별 환경설정을 저장하고있다.getStateLocation()C:/01E/runtime-Favorites/.metadata/.plugins/com.qualityeclipse.favorites

3.4.5 플러그인 구성파일(?)

• 플러그인의 정보를 저장할때 특정 이클립스 설치 구성과 연관된 모든 작업공간이함께 공유하도록 하려면Platform.getConfigurationLocation()메소드를 사용하고 플러그인 전용하위 디렉토리를 생성한다.(Activator에추가)

3.4.6 Plugin과 AbstractUIPlugin(?)

• 모든 Plugin 파생 클래스는 BundleActivator 인터페이스를 구현해야한다.• UI기반 플러그인은 AbstractUIPlugin을 상속한 Plugin클래스를 포함한다.public class FavoritesActivator extends AbstractUIPlugin {

• 환경설정의 자동저장이 둘의 차이점

Page 13: 3장 이클립스 기반구조 eclipser

3.5 플러그인 모델, 3.5.1 Platform

• org.eclipse.core.runtime.Platform클래스는 현재 실행중인 이클립스 환경에 대한 정보를 제공한다.

- 플러그인, 확장, 확장점, 명령행 인자, 작업 관리자 등의 정보를 얻을수있음

3.5.2 플러그인과 번들 ( Platform.getBundle(String) )

• 플러그인 클래스 즉 번들 액티베이터에 접근하려면 해당 플러그인을 로드해야하지만 Bundle인터페이스에는 별도의 부담없이 접근할수있다.

- 번들ID, 플러그인 ID반환,플러그인 버전번호 등을 얻을수있음

3.5.2 플러그인 확장 레지스트리 ( Platform.getExtensionRegistry() )

• 이놈도 마찬가지로 플러그인을 로딩하지 않고도 다양한 플러그인 정보를 얻을수 있는 메소드를 제공한다.

Page 14: 3장 이클립스 기반구조 eclipser

3.6 로깅

• RFRS 요구사항에 따르면 예외나 기타 서비스 관련 정보를 로그 파일에 기록해야한다.

- Plugin클래스에서 제공하는 getLog()

3.6.1 상태 객체 (?)

• org.eclipse.core.runtime패키지의 Istatus유형 클래스들은 동작 결과나 예외를래핑해 전달하고 기록하는 매커니즘을 제공한다.

3.6.2 오류 로그 뷰

• C:\01E\01wspace\.metadata\.log (org.eclipse.core.runtime.CoreException: ~)

3.7 이클립스 플러그인

• 코어, SWT, Jface, 워크벤치 코어, 워크벤치 UI, 팀 공유, 도움말, JDT코어, JDT UI 등

Page 15: 3장 이클립스 기반구조 eclipser

3장 이클립스 기반구조 끝

Eclipser