
Eclipse(이클립스)를 이용하여 간단한 플러그인인 'Favorites' 플러그인을 생성, 빌드, 설치 및 테스트 하는 과정을 단계별로 설명하는 시간을 가지려고 합니다. 이 글을 통해 이클립스 플러그인에 더 가까워지는 시간이 되셨으면 좋겠습니다.
File > New > Project를 선택
Plug-in Development > Plug-in Project 선택 후, Next 클릭
프로젝트 이름을 입력하고 Next 클릭
(필자의 경우, 이미 해당 파일을 생성)
Plug-in Content 페이지에서 플러그인 ID, 버전, 이름, 제공자 등의 정보를 입력
Next를 클릭하고 Templates 페이지에서 템플릿을 선택하지 않고 Finish 클릭
Tip!
플러그인 프로젝트의 이름은 되도록 플러그인 id와 동일하게 정하는 것이 편리하다. 그러므로 새 프로젝트(New Project) 마법사는 프로젝트 이름의 기본값으로 플러그인 id를 사용한다.
모든 플러그인은 META-INF/MANIFEST.MF 파일을 포함합니다. 또한 plugin.xml 파일과 함께 플러그인을 프로그램적으로 표현하는 자바 클래스 파일도 포함할 수 있습니다.
plugin.xml
<?xml version="1.0" encoding="UTF-8"?>
<?eclipse version="3.2"?>
<plugin>
<extension
point="org.eclipse.ui.views">
<category
name="QualityEclipse"
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>
</plugin>
위의 plugin.xml 예제에서 Favorites라는 새로운 뷰를 정의하고 있습니다.
뷰를 정의하기 위해서는 FavoritesView 클래스를 작성해야 합니다.
FavoritesView.java
package com.qualityeclipse.favorites.views;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.ui.part.ViewPart;
public class FavoritesView extends ViewPart {
public void createPartControl(Composite parent) {
// 뷰 UI 구성 요소 생성
}
public void setFocus() {
// 뷰가 포커스를 받을 때 호출
}
}
META-INF/MANIFEST.MF와 plugin.xml 파일은 플러그인의 메타 데이터와 확정점 정의를 포함하는 주요 구성 파일입니다.
plugin.xml과 MANIFEST.MF 이외의 페이지를 수정할 경우, 내역서 편집기가 소스를 재구성할 수도 있음
플러그인 내역서 편집기의 Dependencies 페이지에서는 시스템에 포함된 다른 플러그인과의 관계를 확인 가능
자바 빌드 경로보다는 종속성 목록을 편집, 그래야만 두 속성이 자동으로 항상 동기화된 상태를 유지
Require-Bundle을 통해 Favorites 플러그인이 org.eclipse.core.runtime 플러그인과 org.eclipse.ui 플러그인에 대해 종속됨을 알 수 있음
여기서 종속 관계는 Favorites 프로젝트의 자바 빌드 경로와는 별개
com.qualityeclipse.favorites 프로젝트는 플러그인 프로젝트로서 생성되어 org.eclipse.pde.PluginNature 네이처가 적용되므로 종속성 목록인 변경될 때마다 자동으로 자바 빌드 경로에 반영
플러그인의 종속성 목록과 자바 빌드 경로가 제대로 일치하지 않는다면, 플러그인을 컴파일하고 빌드하는 데 성공하더라도 제대로 실행되지 않을 것
플러그인 클래스는 플러그인의 라이프사이클을 관리합니다.
FavoritesActivator.java
package com.qualityeclipse.favorites;
// 필요한 클래스를 임포트
import org.eclipse.ui.plugin.AbstractUIPlugin;
import org.osgi.framework.BundleContext;
// Favorites 플러그인의 Activator 클래스. AbstractUIPlugin을 상속받아 플러그인의 라이프 사이클을 관리
public class FavoritesActivator extends AbstractUIPlugin {
// 플러그인의 ID를 정의
public static final String PLUGIN_ID = "com.qualityeclipse.favorites";
// 싱글턴 인스턴스를 저장할 변수
private static FavoritesActivator plugin;
// 플러그인이 시작될 때 호출되는 메소드
@Override
public void start(BundleContext context) throws Exception {
// 부모 클래스의 start 메소드를 호출
super.start(context);
// 현재 인스턴스를 싱글턴 인스턴스 변수에 할당
plugin = this;
}
// 플러그인이 중지될 때 호출되는 메소드
@Override
public void stop(BundleContext context) throws Exception {
// 싱글턴 인스턴스를 null로 설정
plugin = null;
// 부모 클래스의 stop 메소드를 호출
super.stop(context);
}
// 싱글턴 인스턴스를 반환하는 메소드
public static FavoritesActivator getDefault() {
return plugin;
}
}
FavoritesActivator 클래스는 플러그인의 시작과 종료를 관리
FavoritesView 클래스는 Eclipse 플러그인에서 사용자 인터페이스(UI)의 일부로 사용될 수 있는 뷰(View)를 정의합니다. 이 클래스는 ViewPart를 확장하며, UI 구성 요소를 생성하고, 뷰가 포커스를 받을 때의 동작을 정의합니다.
FavoritesView.java
package com.qualityeclipse.favorites.views;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.ui.part.*;
import org.eclipse.jface.viewers.*;
import org.eclipse.swt.graphics.Image;
import org.eclipse.ui.*;
import org.eclipse.swt.SWT;
public class FavoritesView extends ViewPart {
private TableViewer viewer; // 뷰어 객체를 정의합니다.
class ViewContentProvider implements IStructuredContentProvider {
@Override
public void inputChanged(Viewer v, Object oldInput, Object newInput) {
// 입력이 변경될 때 호출됩니다.
}
@Override
public void dispose() {
// 뷰어가 해제될 때 호출됩니다.
}
@Override
public Object[] getElements(Object parent) {
// 모델 객체의 요소들을 반환합니다. 여기서는 "One", "Two", "Three" 문자열 배열을 반환합니다.
return new String[] { "One", "Two", "Three" };
}
}
/*
* The label provider class is responsible for translating
* objects into text and images that are displayed
* in the various cells of the table.
*/
class ViewLabelProvider extends LabelProvider implements ITableLabelProvider {
@Override
public String getColumnText(Object obj, int index) {
// 테이블의 특정 셀에 표시될 텍스트를 반환합니다.
return getText(obj);
}
@Override
public Image getColumnImage(Object obj, int index) {
// 테이블의 특정 셀에 표시될 이미지를 반환합니다.
return getImage(obj);
}
@Override
public Image getImage(Object obj) {
// 객체에 대한 이미지를 반환합니다. 여기서는 기본 Eclipse 이미지를 사용합니다.
return PlatformUI.getWorkbench().getSharedImages().getImage(ISharedImages.IMG_OBJ_ELEMENT);
}
}
/**
* The constructor.
*/
public FavoritesView() {
// 기본 생성자입니다.
}
/**
* This is a callback that will allow us
* to create the viewer and initialize it.
*/
@Override
public void createPartControl(Composite parent) {
// 뷰어를 생성하고 초기화하는 메서드입니다.
viewer = new TableViewer(parent, SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL);
viewer.setContentProvider(new ViewContentProvider());
viewer.setLabelProvider(new ViewLabelProvider());
viewer.setInput(getViewSite());
}
/**
* Passing the focus request to the viewer's control.
*/
@Override
public void setFocus() {
// 뷰가 포커스를 받을 때 호출됩니다.
viewer.getControl().setFocus();
}
/**
* For testing purposes only.
* @return the table viewer in the Favorites view
*/
public TableViewer getFavoritesViewer() {
// 뷰어 객체를 반환합니다. 테스트 목적 등으로 사용됩니다.
return viewer;
}
}
이 클래스는 Eclipse 플러그인 개발에서 뷰를 정의하고, 데이터를 표시하고, 포커스를 관리하는 방법을 보여줍니다. 각 부분의 역할과 동작을 이해하면 Eclipse 플러그인을 보다 효율적으로 개발할 수 있습니다.
이클립스에서 플러그인 프로젝트를 직접 빌드하려면 프로젝트를 선택하고 Export > Deployable plug-ins and fragments를 선택
Ant 스크립트를 사용하여 빌드 프로세스를 자동화할 수 있습니다.
이클립스를 종료
설치 프로세스를 시작하기 전에, 현재 실행 중인 이클립스를 종료합니다. 이는 파일 잠금 문제를 피하고 플러그인 설치 과정에서 발생할 수 있는 오류를 방지하기 위함입니다.
이클립스 디렉토리(예: C:\eclipse)에 FavoritesPlugin.zip 파일의 압축을 해제
다운로드한 FavoritesPlugin.zip 파일을 이클립스가 설치된 디렉토리로 복사합니다. 일반적으로 이 디렉토리는 C:\eclipse와 같이 설정됩니다.
이 디렉토리에서 FavoritesPlugin.zip 파일의 압축을 해제합니다. 압축을 해제하면 플러그인 파일들이 적절한 디렉토리 구조에 배치됩니다.
/plugins 디렉토리에 Favorites 플러그인이 들어있는지 확인
압축을 해제한 후, 이클립스 디렉토리 내의 plugins 디렉토리를 확인합니다.
plugins 디렉토리 내에 com.qualityeclipse.favorites_1.0.0.jar과 같은 Favorites 플러그인 파일이 존재하는지 확인합니다.
이클립스를 다시 실행
모든 파일이 올바르게 배치되었는지 확인한 후, 이클립스를 다시 실행합니다.
이클립스가 시작될 때 새로 설치된 플러그인을 인식하고 로드합니다.
플러그인 설치를 확인하는 방법
이클립스를 다시 실행한 후, 새 플러그인이 제대로 설치되었는지 확인하려면 이클립스의 Help 메뉴에서 About Eclipse IDE를 선택합니다.
Installation Details 버튼을 클릭하여 Installed Software 탭에서 Favorites Plug-in이 목록에 있는지 확인합니다.
플러그인을 사용하는 방법
설치된 Favorites 플러그인을 사용하는 방법은 다음과 같습니다:
이클립스 상단 메뉴에서 Window > Show View > Other...를 선택합니다.
Favorites 카테고리를 찾고, 그 아래에 있는 Favorites View를 선택하여 열립니다.
이제 Favorites View가 나타나고, 사용자는 이 뷰를 통해 플러그인을 사용할 수 있습니다.
Tip!
만약 플러그인이 제대로 작동하지 않는다면, 이클립스 로그 파일을 확인하여 문제를 찾을 수 있습니다. 로그 파일은 일반적으로 이클립스 디렉토리 내의 workspace/.metadata/.log 파일에 위치합니다.
이클립스 플러그인을 개발할 때 디버깅은 필수적인 과정입니다. 디버깅을 통해 플러그인의 동작을 확인하고, 발생하는 문제를 해결할 수 있습니다. 아래는 디버깅 과정의 각 단계를 자세히 설명한 내용입니다.
이클립스에서 실행 구성 메뉴 열기
Run > Run Configurations를 선택합니다.
이 메뉴를 통해 다양한 실행 구성 설정을 할 수 있습니다.
Eclipse Application 구성 추가
실행 구성 대화 상자에서 Eclipse Application을 선택합니다.
오른쪽 클릭 후 New를 선택하여 새로운 실행 구성을 생성합니다.
구성 이름 지정
런타임 설정
기본 탭에서 Location과 Working Directory는 기본 설정을 유지합니다.
필요에 따라 프로그램 인수나 VM 인수를 추가할 수 있습니다.
Plug-ins 탭 선택
필요한 플러그인 선택
Add Required Plug-ins 버튼을 클릭하여 현재 프로젝트에서 필요한 모든 플러그인을 자동으로 선택합니다.
직접 플러그인을 선택하려면 플러그인 목록에서 필요한 플러그인을 수동으로 선택할 수 있습니다.
예: com.qualityeclipse.favorites, org.eclipse.ui, org.eclipse.core.runtime 등을 선택합니다.
프래그먼트 선택
플러그인과 함께 필요한 프래그먼트를 선택합니다.
프래그먼트는 특정 플러그인에 추가 기능을 제공하는 모듈입니다.
런타임 워크벤치 실행
Run 버튼을 클릭하여 설정한 실행 구성을 실행합니다.
이클립스는 새로운 워크벤치 인스턴스를 시작합니다. 이를 런타임 워크벤치라고 합니다.
플러그인 테스트 및 디버깅
런타임 워크벤치에서 플러그인의 동작을 테스트합니다.
플러그인이 예상대로 동작하는지 확인합니다.
런타임 워크벤치에서 오류가 발생하면, 이클립스 IDE의 Debug 뷰를 사용하여 문제를 진단하고 해결할 수 있습니다.
Favorites 뷰를 닫음
이클립스를 종료
이클립스 플러그인 디렉토리에서 com.quality.favorites_1.0.0.jar 파일을 지움
이클립스를 다시 시작
Show View 대화창을 열어 더 이상 Favorites 뷰와 Quality Eclipse 카테고리가 없을 을 확인