SlideShare a Scribd company logo
3장 이클립스 기반구조
Eclipser
[ 그림 3-1 ]
3.1 기반구조 개요
• 플러거블한 구조
• 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.0
Bundle-ManifestVersion: 2
Bundle-Name: Favorites
Bundle-SymbolicName: com.qualityeclipse.favorites;singleton:=true
Bundle-Version: 1.0.0.qualifier
Bundle-Activator: com.qualityeclipse.favorites.Activator
Bundle-Vendor: QUALITYECLIPSE
Require-Bundle: org.eclipse.ui,
org.eclipse.core.runtime
Bundle-RequiredExecutionEnvironment: JavaSE-1.7
Bundle-ActivationPolicy: lazy
[ MANIFEST.MF ]
3.1.2 작업공간(?)
• 이클립스 IDE는 workspace에 있는 파일을 출력하고 수정한다.
• 사용자 파일과 환경설정파일
• 환경파일
- 이클립스IDE나 플러그인
- 정적플러그인 소스
- 플러그인 구성파일
여러 작업공간에서 공유가능
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
3.2 플러그인 내역서
•Platform Plug-in Developer Guide > Reference > Other reference information
Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: Favorites
Bundle-SymbolicName: com.qualityeclipse.favorites;singleton:=true
Bundle-Version: 1.0.0.qualifier
Bundle-Activator: com.qualityeclipse.favorites.Activator
Bundle-Vendor: QUALITYECLIPSE
Require-Bundle: org.eclipse.ui,
org.eclipse.core.runtime
Bundle-RequiredExecutionEnvironment: JavaSE-1.7
Bundle-ActivationPolicy: lazy
3.3.1 플러그인 선언
Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: Favorites
Bundle-SymbolicName: com.qualityeclipse.favorites;singleton:=true
Bundle-Version: 1.0.0.qualifier
Bundle-Activator: com.qualityeclipse.favorites.Activator
Bundle-Vendor: QUALITYECLIPSE
Require-Bundle: org.eclipse.ui,
org.eclipse.core.runtime
Bundle-RequiredExecutionEnvironment: JavaSE-1.7
Bundle-ActivationPolicy: lazy
3.3.1 플러그인 선언
[ MANIFEST.MF ]
Help –AboutEclipse sdk-plugindetail
Plugin - Class
3.3.1 플러그인 선언
Export-Package: com.qualityeclipse.favorites.views
Import-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)”
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 definition
or Help – Help contents
3.4 플러그인 클래스(bundle – activator)
• 플러그인이 로딩되었음을 전달 받는 첫번째 클래스
플러그인이 종료되었음을 전달 받는 마지막 클래스
• 시동과 종료를 알아서 정보를 저장할수있음
3.4.2 플러그인 이른 시동하기
• 리소스 변경 정보를 플러그인에 제공하는 경우가 있음
- org.eclipse.ui.startup의 확장, org.eclipse.ui.Istartup를 구현후 earlyStartup()
• 9.5장 늦은로딩시에 변경사항을 큐에 넣어뒀다 전달받는 방법 있음
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 {
• 환경설정의 자동저장이 둘의 차이점
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() )
• 이놈도 마찬가지로 플러그인을 로딩하지 않고도 다양한 플러그인 정보를 얻을
수 있는 메소드를 제공한다.
3.6 로깅
• RFRS 요구사항에 따르면 예외나 기타 서비스 관련 정보를 로그 파일에 기록해
야한다.
- Plugin클래스에서 제공하는 getLog()
3.6.1 상태 객체 (?)
• org.eclipse.core.runtime패키지의 Istatus유형 클래스들은 동작 결과나 예외를
래핑해 전달하고 기록하는 매커니즘을 제공한다.
3.6.2 오류 로그 뷰
• C:01E01wspace.metadata.log (org.eclipse.core.runtime.CoreException: ~)
3.7 이클립스 플러그인
• 코어, SWT, Jface, 워크벤치 코어, 워크벤치 UI, 팀 공유, 도움말, JDT코어, JDT UI 등
3장 이클립스 기반구조 끝
Eclipser

More Related Content

What's hot

Tomcat monitoring using_javamelody
Tomcat monitoring using_javamelodyTomcat monitoring using_javamelody
Tomcat monitoring using_javamelody
중선 곽
 
세미나 Spring mybatis
세미나 Spring mybatis세미나 Spring mybatis
세미나 Spring mybatis
Somang Jeong
 
Apache http component
Apache http componentApache http component
Apache http component
흥래 김
 
[오픈소스컨설팅]Day #3 MySQL Monitoring, Trouble Shooting
[오픈소스컨설팅]Day #3 MySQL Monitoring, Trouble Shooting[오픈소스컨설팅]Day #3 MySQL Monitoring, Trouble Shooting
[오픈소스컨설팅]Day #3 MySQL Monitoring, Trouble Shooting
Ji-Woong Choi
 
Cmake tutorial
Cmake tutorialCmake tutorial
Cmake tutorial
상문 이
 
1
11
Python study 1강 (오픈소스컨설팅 내부 강의)
Python study 1강 (오픈소스컨설팅 내부 강의)Python study 1강 (오픈소스컨설팅 내부 강의)
Python study 1강 (오픈소스컨설팅 내부 강의)
정명훈 Jerry Jeong
 
[오픈소스컨설팅]Subversion vs git - 참을 수 없는 간단함
[오픈소스컨설팅]Subversion vs git - 참을 수 없는 간단함[오픈소스컨설팅]Subversion vs git - 참을 수 없는 간단함
[오픈소스컨설팅]Subversion vs git - 참을 수 없는 간단함
Ji-Woong Choi
 
[오픈소스컨설팅]MySQL Monitoring
[오픈소스컨설팅]MySQL Monitoring[오픈소스컨설팅]MySQL Monitoring
[오픈소스컨설팅]MySQL Monitoring
Ji-Woong Choi
 
[제14회 JCO 컨퍼런스] 개발자를 위한 서버이중화 by JAVACAFE
[제14회 JCO 컨퍼런스] 개발자를 위한 서버이중화 by JAVACAFE  [제14회 JCO 컨퍼런스] 개발자를 위한 서버이중화 by JAVACAFE
[제14회 JCO 컨퍼런스] 개발자를 위한 서버이중화 by JAVACAFE
흥래 김
 
[오픈소스컨설팅]Spring 3.1 Core
[오픈소스컨설팅]Spring 3.1 Core [오픈소스컨설팅]Spring 3.1 Core
[오픈소스컨설팅]Spring 3.1 Core
Ji-Woong Choi
 
[오픈소스컨설팅]J boss6 7_교육자료
[오픈소스컨설팅]J boss6 7_교육자료[오픈소스컨설팅]J boss6 7_교육자료
[오픈소스컨설팅]J boss6 7_교육자료
Ji-Woong Choi
 
[오픈소스컨설팅]Fault Tolerance Architecture by Netflix
[오픈소스컨설팅]Fault Tolerance Architecture by Netflix[오픈소스컨설팅]Fault Tolerance Architecture by Netflix
[오픈소스컨설팅]Fault Tolerance Architecture by Netflix
Ji-Woong Choi
 
Atom package part1
Atom package part1Atom package part1
Atom package part1
KangSeok(Thomas) Lee
 
Online service 계층별 성능 모니터링 방안
Online service 계층별 성능 모니터링 방안Online service 계층별 성능 모니터링 방안
Online service 계층별 성능 모니터링 방안
중선 곽
 
171220 웹프로그래밍 web app 토렌트 관리체계
171220 웹프로그래밍 web app 토렌트 관리체계171220 웹프로그래밍 web app 토렌트 관리체계
171220 웹프로그래밍 web app 토렌트 관리체계
우진 신
 
Composer
ComposerComposer
Composer
jhyeon1010
 
Envoy 를 이용한 코드 배포 자동화
Envoy 를 이용한 코드 배포 자동화Envoy 를 이용한 코드 배포 자동화
Envoy 를 이용한 코드 배포 자동화
Juwon Kim
 
Metaworks3 Framework workbook 2015
Metaworks3 Framework workbook 2015Metaworks3 Framework workbook 2015
Metaworks3 Framework workbook 2015
uEngine Solutions
 

What's hot (20)

Tomcat monitoring using_javamelody
Tomcat monitoring using_javamelodyTomcat monitoring using_javamelody
Tomcat monitoring using_javamelody
 
세미나 Spring mybatis
세미나 Spring mybatis세미나 Spring mybatis
세미나 Spring mybatis
 
Final report201101
Final report201101Final report201101
Final report201101
 
Apache http component
Apache http componentApache http component
Apache http component
 
[오픈소스컨설팅]Day #3 MySQL Monitoring, Trouble Shooting
[오픈소스컨설팅]Day #3 MySQL Monitoring, Trouble Shooting[오픈소스컨설팅]Day #3 MySQL Monitoring, Trouble Shooting
[오픈소스컨설팅]Day #3 MySQL Monitoring, Trouble Shooting
 
Cmake tutorial
Cmake tutorialCmake tutorial
Cmake tutorial
 
1
11
1
 
Python study 1강 (오픈소스컨설팅 내부 강의)
Python study 1강 (오픈소스컨설팅 내부 강의)Python study 1강 (오픈소스컨설팅 내부 강의)
Python study 1강 (오픈소스컨설팅 내부 강의)
 
[오픈소스컨설팅]Subversion vs git - 참을 수 없는 간단함
[오픈소스컨설팅]Subversion vs git - 참을 수 없는 간단함[오픈소스컨설팅]Subversion vs git - 참을 수 없는 간단함
[오픈소스컨설팅]Subversion vs git - 참을 수 없는 간단함
 
[오픈소스컨설팅]MySQL Monitoring
[오픈소스컨설팅]MySQL Monitoring[오픈소스컨설팅]MySQL Monitoring
[오픈소스컨설팅]MySQL Monitoring
 
[제14회 JCO 컨퍼런스] 개발자를 위한 서버이중화 by JAVACAFE
[제14회 JCO 컨퍼런스] 개발자를 위한 서버이중화 by JAVACAFE  [제14회 JCO 컨퍼런스] 개발자를 위한 서버이중화 by JAVACAFE
[제14회 JCO 컨퍼런스] 개발자를 위한 서버이중화 by JAVACAFE
 
[오픈소스컨설팅]Spring 3.1 Core
[오픈소스컨설팅]Spring 3.1 Core [오픈소스컨설팅]Spring 3.1 Core
[오픈소스컨설팅]Spring 3.1 Core
 
[오픈소스컨설팅]J boss6 7_교육자료
[오픈소스컨설팅]J boss6 7_교육자료[오픈소스컨설팅]J boss6 7_교육자료
[오픈소스컨설팅]J boss6 7_교육자료
 
[오픈소스컨설팅]Fault Tolerance Architecture by Netflix
[오픈소스컨설팅]Fault Tolerance Architecture by Netflix[오픈소스컨설팅]Fault Tolerance Architecture by Netflix
[오픈소스컨설팅]Fault Tolerance Architecture by Netflix
 
Atom package part1
Atom package part1Atom package part1
Atom package part1
 
Online service 계층별 성능 모니터링 방안
Online service 계층별 성능 모니터링 방안Online service 계층별 성능 모니터링 방안
Online service 계층별 성능 모니터링 방안
 
171220 웹프로그래밍 web app 토렌트 관리체계
171220 웹프로그래밍 web app 토렌트 관리체계171220 웹프로그래밍 web app 토렌트 관리체계
171220 웹프로그래밍 web app 토렌트 관리체계
 
Composer
ComposerComposer
Composer
 
Envoy 를 이용한 코드 배포 자동화
Envoy 를 이용한 코드 배포 자동화Envoy 를 이용한 코드 배포 자동화
Envoy 를 이용한 코드 배포 자동화
 
Metaworks3 Framework workbook 2015
Metaworks3 Framework workbook 2015Metaworks3 Framework workbook 2015
Metaworks3 Framework workbook 2015
 

Similar to 3장 이클립스 기반구조 eclipser

Cluster - spark
Cluster - sparkCluster - spark
Cluster - spark
HyeonSeok Choi
 
NDC 2015 마비노기 듀얼 패치 시스템
NDC 2015 마비노기 듀얼 패치 시스템NDC 2015 마비노기 듀얼 패치 시스템
NDC 2015 마비노기 듀얼 패치 시스템tcaesvk
 
[pgday.Seoul 2022] PostgreSQL구조 - 윤성재
[pgday.Seoul 2022] PostgreSQL구조 - 윤성재[pgday.Seoul 2022] PostgreSQL구조 - 윤성재
[pgday.Seoul 2022] PostgreSQL구조 - 윤성재
PgDay.Seoul
 
Osc4.x installation v1-upload
Osc4.x installation v1-uploadOsc4.x installation v1-upload
Osc4.x installation v1-upload
Dong-Hwa jung
 
Springmvc
SpringmvcSpringmvc
Springmvc
HyungKuIm
 
Hyperledger farbric build your first network install and analysis
Hyperledger farbric   build your first network install and analysisHyperledger farbric   build your first network install and analysis
Hyperledger farbric build your first network install and analysis
병준 김
 
16 데이터 저장과 사용
16 데이터 저장과 사용16 데이터 저장과 사용
16 데이터 저장과 사용운용 최
 
(130608) #fitalk pfp (portable forensic plaform)
(130608) #fitalk   pfp (portable forensic plaform)(130608) #fitalk   pfp (portable forensic plaform)
(130608) #fitalk pfp (portable forensic plaform)
INSIGHT FORENSIC
 
ECS+Locust로 부하 테스트 진행하기
ECS+Locust로 부하 테스트 진행하기ECS+Locust로 부하 테스트 진행하기
ECS+Locust로 부하 테스트 진행하기
Yungon Park
 
Oracle linux8 solaris_new_features-suk kim
Oracle linux8 solaris_new_features-suk kimOracle linux8 solaris_new_features-suk kim
Oracle linux8 solaris_new_features-suk kim
suk kim
 
JCO 11th 클라우드 환경에서 Java EE 운영 환경 구축하기
JCO 11th 클라우드 환경에서 Java EE 운영 환경 구축하기JCO 11th 클라우드 환경에서 Java EE 운영 환경 구축하기
JCO 11th 클라우드 환경에서 Java EE 운영 환경 구축하기Ted Won
 
스프링 어플리케이션의 문제해결사례와 안티패턴
스프링 어플리케이션의 문제해결사례와 안티패턴스프링 어플리케이션의 문제해결사례와 안티패턴
스프링 어플리케이션의 문제해결사례와 안티패턴
Sanghyuk Jung
 
Node.js 기본
Node.js 기본Node.js 기본
Node.js 기본
Han Jung Hyun
 
okspring3x
okspring3xokspring3x
okspring3x
Kenu, GwangNam Heo
 
Elastic Search Performance Optimization - Deview 2014
Elastic Search Performance Optimization - Deview 2014Elastic Search Performance Optimization - Deview 2014
Elastic Search Performance Optimization - Deview 2014
Gruter
 
[오픈소스컨설팅]애플리케이션 빌드 및_배포가이드_v1.0_20140211
[오픈소스컨설팅]애플리케이션 빌드 및_배포가이드_v1.0_20140211[오픈소스컨설팅]애플리케이션 빌드 및_배포가이드_v1.0_20140211
[오픈소스컨설팅]애플리케이션 빌드 및_배포가이드_v1.0_20140211
Ji-Woong Choi
 
XE 오픈 세미나(2014-04-26) - 김동현 "XE 코어 구조론"
XE 오픈 세미나(2014-04-26) - 김동현 "XE 코어 구조론"XE 오픈 세미나(2014-04-26) - 김동현 "XE 코어 구조론"
XE 오픈 세미나(2014-04-26) - 김동현 "XE 코어 구조론"
XpressEngine
 
스프링군살없이세팅하기(The way to setting the Spring framework for web.)
스프링군살없이세팅하기(The way to setting the Spring framework for web.)스프링군살없이세팅하기(The way to setting the Spring framework for web.)
스프링군살없이세팅하기(The way to setting the Spring framework for web.)
EunChul Shin
 
The log based event script (로그기반 이벤트스크립트)
The log based event script (로그기반 이벤트스크립트)The log based event script (로그기반 이벤트스크립트)
The log based event script (로그기반 이벤트스크립트)
Jun Hong Kim
 

Similar to 3장 이클립스 기반구조 eclipser (20)

Cluster - spark
Cluster - sparkCluster - spark
Cluster - spark
 
NDC 2015 마비노기 듀얼 패치 시스템
NDC 2015 마비노기 듀얼 패치 시스템NDC 2015 마비노기 듀얼 패치 시스템
NDC 2015 마비노기 듀얼 패치 시스템
 
[pgday.Seoul 2022] PostgreSQL구조 - 윤성재
[pgday.Seoul 2022] PostgreSQL구조 - 윤성재[pgday.Seoul 2022] PostgreSQL구조 - 윤성재
[pgday.Seoul 2022] PostgreSQL구조 - 윤성재
 
Osc4.x installation v1-upload
Osc4.x installation v1-uploadOsc4.x installation v1-upload
Osc4.x installation v1-upload
 
Springmvc
SpringmvcSpringmvc
Springmvc
 
Hyperledger farbric build your first network install and analysis
Hyperledger farbric   build your first network install and analysisHyperledger farbric   build your first network install and analysis
Hyperledger farbric build your first network install and analysis
 
16 데이터 저장과 사용
16 데이터 저장과 사용16 데이터 저장과 사용
16 데이터 저장과 사용
 
(130608) #fitalk pfp (portable forensic plaform)
(130608) #fitalk   pfp (portable forensic plaform)(130608) #fitalk   pfp (portable forensic plaform)
(130608) #fitalk pfp (portable forensic plaform)
 
ECS+Locust로 부하 테스트 진행하기
ECS+Locust로 부하 테스트 진행하기ECS+Locust로 부하 테스트 진행하기
ECS+Locust로 부하 테스트 진행하기
 
Oracle linux8 solaris_new_features-suk kim
Oracle linux8 solaris_new_features-suk kimOracle linux8 solaris_new_features-suk kim
Oracle linux8 solaris_new_features-suk kim
 
JCO 11th 클라우드 환경에서 Java EE 운영 환경 구축하기
JCO 11th 클라우드 환경에서 Java EE 운영 환경 구축하기JCO 11th 클라우드 환경에서 Java EE 운영 환경 구축하기
JCO 11th 클라우드 환경에서 Java EE 운영 환경 구축하기
 
스프링 어플리케이션의 문제해결사례와 안티패턴
스프링 어플리케이션의 문제해결사례와 안티패턴스프링 어플리케이션의 문제해결사례와 안티패턴
스프링 어플리케이션의 문제해결사례와 안티패턴
 
Node.js 기본
Node.js 기본Node.js 기본
Node.js 기본
 
Eclipse web
Eclipse webEclipse web
Eclipse web
 
okspring3x
okspring3xokspring3x
okspring3x
 
Elastic Search Performance Optimization - Deview 2014
Elastic Search Performance Optimization - Deview 2014Elastic Search Performance Optimization - Deview 2014
Elastic Search Performance Optimization - Deview 2014
 
[오픈소스컨설팅]애플리케이션 빌드 및_배포가이드_v1.0_20140211
[오픈소스컨설팅]애플리케이션 빌드 및_배포가이드_v1.0_20140211[오픈소스컨설팅]애플리케이션 빌드 및_배포가이드_v1.0_20140211
[오픈소스컨설팅]애플리케이션 빌드 및_배포가이드_v1.0_20140211
 
XE 오픈 세미나(2014-04-26) - 김동현 "XE 코어 구조론"
XE 오픈 세미나(2014-04-26) - 김동현 "XE 코어 구조론"XE 오픈 세미나(2014-04-26) - 김동현 "XE 코어 구조론"
XE 오픈 세미나(2014-04-26) - 김동현 "XE 코어 구조론"
 
스프링군살없이세팅하기(The way to setting the Spring framework for web.)
스프링군살없이세팅하기(The way to setting the Spring framework for web.)스프링군살없이세팅하기(The way to setting the Spring framework for web.)
스프링군살없이세팅하기(The way to setting the Spring framework for web.)
 
The log based event script (로그기반 이벤트스크립트)
The log based event script (로그기반 이벤트스크립트)The log based event script (로그기반 이벤트스크립트)
The log based event script (로그기반 이벤트스크립트)
 

3장 이클립스 기반구조 eclipser

  • 2. [ 그림 3-1 ] 3.1 기반구조 개요 • 플러거블한 구조 • eclipser의 아키텍처 • 플러긴 로더에의한 실행 *다소작은 커널이라고함
  • 3. <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.0 Bundle-ManifestVersion: 2 Bundle-Name: Favorites Bundle-SymbolicName: com.qualityeclipse.favorites;singleton:=true Bundle-Version: 1.0.0.qualifier Bundle-Activator: com.qualityeclipse.favorites.Activator Bundle-Vendor: QUALITYECLIPSE Require-Bundle: org.eclipse.ui, org.eclipse.core.runtime Bundle-RequiredExecutionEnvironment: JavaSE-1.7 Bundle-ActivationPolicy: lazy [ MANIFEST.MF ]
  • 4. 3.1.2 작업공간(?) • 이클립스 IDE는 workspace에 있는 파일을 출력하고 수정한다. • 사용자 파일과 환경설정파일 • 환경파일 - 이클립스IDE나 플러그인 - 정적플러그인 소스 - 플러그인 구성파일 여러 작업공간에서 공유가능
  • 5. 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
  • 6. 3.2 플러그인 내역서 •Platform Plug-in Developer Guide > Reference > Other reference information
  • 7. Manifest-Version: 1.0 Bundle-ManifestVersion: 2 Bundle-Name: Favorites Bundle-SymbolicName: com.qualityeclipse.favorites;singleton:=true Bundle-Version: 1.0.0.qualifier Bundle-Activator: com.qualityeclipse.favorites.Activator Bundle-Vendor: QUALITYECLIPSE Require-Bundle: org.eclipse.ui, org.eclipse.core.runtime Bundle-RequiredExecutionEnvironment: JavaSE-1.7 Bundle-ActivationPolicy: lazy 3.3.1 플러그인 선언
  • 8. Manifest-Version: 1.0 Bundle-ManifestVersion: 2 Bundle-Name: Favorites Bundle-SymbolicName: com.qualityeclipse.favorites;singleton:=true Bundle-Version: 1.0.0.qualifier Bundle-Activator: com.qualityeclipse.favorites.Activator Bundle-Vendor: QUALITYECLIPSE Require-Bundle: org.eclipse.ui, org.eclipse.core.runtime Bundle-RequiredExecutionEnvironment: JavaSE-1.7 Bundle-ActivationPolicy: lazy 3.3.1 플러그인 선언 [ MANIFEST.MF ] Help –AboutEclipse sdk-plugindetail Plugin - Class
  • 9. 3.3.1 플러그인 선언 Export-Package: com.qualityeclipse.favorites.views Import-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)”
  • 10. 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 definition or Help – Help contents
  • 11. 3.4 플러그인 클래스(bundle – activator) • 플러그인이 로딩되었음을 전달 받는 첫번째 클래스 플러그인이 종료되었음을 전달 받는 마지막 클래스 • 시동과 종료를 알아서 정보를 저장할수있음 3.4.2 플러그인 이른 시동하기 • 리소스 변경 정보를 플러그인에 제공하는 경우가 있음 - org.eclipse.ui.startup의 확장, org.eclipse.ui.Istartup를 구현후 earlyStartup() • 9.5장 늦은로딩시에 변경사항을 큐에 넣어뒀다 전달받는 방법 있음
  • 12. 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 { • 환경설정의 자동저장이 둘의 차이점
  • 13. 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() ) • 이놈도 마찬가지로 플러그인을 로딩하지 않고도 다양한 플러그인 정보를 얻을 수 있는 메소드를 제공한다.
  • 14. 3.6 로깅 • RFRS 요구사항에 따르면 예외나 기타 서비스 관련 정보를 로그 파일에 기록해 야한다. - Plugin클래스에서 제공하는 getLog() 3.6.1 상태 객체 (?) • org.eclipse.core.runtime패키지의 Istatus유형 클래스들은 동작 결과나 예외를 래핑해 전달하고 기록하는 매커니즘을 제공한다. 3.6.2 오류 로그 뷰 • C:01E01wspace.metadata.log (org.eclipse.core.runtime.CoreException: ~) 3.7 이클립스 플러그인 • 코어, SWT, Jface, 워크벤치 코어, 워크벤치 UI, 팀 공유, 도움말, JDT코어, JDT UI 등

Editor's Notes

  1. 3장 이클립스 기반구조 2장까지 읽으셨다면 2장에서 프로젝트를 생성하고 빌드한후 설치해보고 디버깅까지 해보았습니다. 이것이 플러거블한 즉, 띠었다 붙였다 하기에 플러그인이라고 하나보죠, 이게 즉 eclipse의 아키텍처입니다. 3장에서는 그 플러그인에 관한 기반이 되는 구조를 살펴보겠습니다. [ 그림 3-1 ] 플러그인을 실행시키는 놈은 eclipse입니다. 그래서 eclipse를 plugin loader이라고 합니다. (다른말로는 작은 커널이라고도합니다.) 참고 : 커널(Kernel)은 다음과 같은 뜻을 가지고 있다.  1. 컴퓨터의 하드웨어와 직접 상호작용하는 모듈이다. 2. 제어 프로그램 중 주기억장치에 상주하는 모듈이다. 3. 운영체제를 구성하는 프로세스와 운영체제의 제어 아래에서 수행하는 프로그램에 대한 자원할당을 수행한다. --그림을 보시면 이클립스의 플러그인 로더가 보입니다.
  2. 3.1.1 플러그인 구조 Eclipse는 만들어진 수많은 플러그인을 load한다고 했죠? 근데 규칙이 있으며 무작정 load하지도 않습니다. 그 규칙은 각 플러그인이 가지고 있는 MINIFEST.MF와 plugin.xml파일에 있습니다. 이것을 우리는 "플러그인 내역서" 라고 부릅니다. 플러그인들이 무수히 많은데 이것을 최초실행시 한번에 로드 하지 않고 최소 필요한 것만을 로딩합니다. 그리고 다른 로드되어지지않은 플러그인들은 필요할때 user에 의해 load를 하게 됩니다. 우리는 이것을 늦은 loading즉, Lazy Loading라고 합니다. 또한, Eclipse최초로딩시에 플러그인들의 MINIFEST.MF와 plugin.xml을 읽어들여 구조체를 만들어 놓습니다. Lazy loding할시에 빠르게 수행할수있으며 해당 구조체의 memory만 참조하면 어디에 있는 녀석을 가지고 와야하는지 빨리 알수있겠죠. [ 그림3-2 ] 해당그림은 favorites.jar로 압축한 favoritesView입니다. 참고 : 여기서 bundle라는 말이 나오는데 plugin과 같은 말입니다. 번들(Bundle) 영어로 묶음이라는 뜻이며, 보통 상품을 구매했을 때 끼워주는 걸 말한다. 소비자가 큰 힘들이지 않고 간단하게 제품을 즉시 사용가능한 상태로 셋팅할 수 있...
  3. 3.1.2. 작업공간 .... 계층구조로 되어있음 1) 사용자파일 => 프로젝트, 소스코드 2) 환경설정등의 플러그인 상태 정보 ... 해당작업 공간에만 연관 ----------------- 이클립스IDE나 플러그인 정적플러그인 소스 플러그인 구성 파일 이것들은 여러 작업공간에서 공유할수 있다.
  4. 3.2 플러그인 디텍토리 와 JAR파일 제목이 무엇을 의미할까요? Export했을때 2종류, 이는 즉 이클립스가 두가지 방식을 다인식 한다는 이야기죠? 플러그인이 생성되면 ,export하면 1) 플러그인 디렉토리 2) 단일 JAR형태 2가지 입니다. 디렉토리명 ---------------------------------- example) com.qualityeclipse.favorites_1.0.0.jar ------ suffix를 붙인다. 디렉토리 형태가 아닌 JAR로 할시 3.2.1 링크파일 또한 이클립스는 이런 플러그인 디렉토리, JAR를 사용함에 있어서 링크파일도 제공합니다. - 링크파일을 제공하여 다른위치의 플러그인을 찾아 로딩함. 그때 필요한것이 링크파일입니다. * 이런접근 방법은(RFRS: Ready for Rational software)의 요구사항을 만족함 * 다른 이클립스(=여러 이클립스)에 연결하여 사용가능 - 사용방법은 c:/eclipse/link/com.qualityeclipse.favorites.link 생성 내용 : path = c:/QualityEclipse/Favorites 이파일을 보고 플러그인을 읽어가나보죠? 안해봤네요 ^^ 3.2.1 추가적으로 혼합방식도 제공한다고합니다. (무슨말이진모르겠다) 맺은말이 아니라 스터디에 미니 챕터에서 할내용^^? 구글 검색 : 이클립스 플러그인 개요 http://eclipse.or.kr/wiki/%EA%B3%B5%EC%82%AC%EC%A4%91:%EC%B4%88%EB%B3%B4_%EC%9D%B4%ED%81%B4%EB%A6%BD%EC%8A%A4_%ED%94%8C%EB%9F%AC%EA%B7%B8%EC%9D%B8_%EA%B0%9C%EB%B0%9C%EC%9E%90%EB%A5%BC_%EC%9C%84%ED%95%9C_%EC%95%88%EB%82%B4%EC%84%9C
  5. 3.3플러그인 내역서 Platform Plug-in Developer Guide > Reference > Other reference information OSGi Bundle Manifest Headers
  6. Com.<회사명>.<제품명> 으로 symbolicNAme(=plugin-id)를 작명하게 됩니다. depthe는 더 나가도 됩니다. 제품전체가 풀러그인으로 구성이 되어있다면요 *여기에서 사용하는 value문자열은 properties로 뺄수가 있습니다. 왜 빼는거지? 3.3.1.4 플러그인 클래스 선언 모든 플러그인은 필요한 경우에 Favorites 플러그인처럼 플러그인 클래스를 지정할수있습니다.
  7. Bundle-Classpath에는 플러그인안에 포함된 라이브러리를 콤마로 구분해 나열한다. 그리고 Class-path에서 지정한 라이브러리를 다른 플러그인에서 접근할수 있게 지정하려면 Export-package로 쓰면된다. Enumerate : 열거하다, 낱낱이 세다.
  8. 이런 규약이나 형식 등을 사용해서 이클립스는 플러그인 전체를 로딩하지 않고도 다양한 플러그인에서 선언하는 확장에 대한 정보를 로딩한다.
  9. 워크벤치는 하나인줄알았는데 ?? 3.4.5. 읽기전용일시에 user 폴더등에 생성하여 사용가능합니다.
  10. 실행중에 확장점이 변하는 경우도 있다고 합니다. OSGI에 점차 따르면서
  11. 실행중에 확장점이 변하는 경우도 있다고 합니다. OSGI에 점차 따르면서 코어 : 확장처리등의 기본적인 서비스를 구성하는 UI없는 플러그인의 범용 저수준 그룹 SWT : 표준 위젯 툴킷 Jface : SWT위에서 부가적인 UI기능을 제공하는 범용 라이브러리이다. 워크벤치 코어 : 프로젝트, 프로젝트 네이처, 빌더 등 이클립스 IDE자체에 관련이 있으면서 UI없는 동작을 제공한느 플러그인이다. 워크벤치 UI : 편집기, 뷰, 퍼스펙티브, 액션, 환경설정 등 이클립스 IDE자체에 관련된 UI동작을 제공하는 플러그인이다.