SSISO Community

시소당

플러그인 개발 시작

-  이클립스가  구동될  떄,  런타임이  최초로  하는  일은  플러그인을  확인하는  것.

-  \eclipse\plugin  의  서브  디렉토리  안에  plugin.xml이  있는지를  찾는다.  

-  그리고  이  파일을  보고  플러그인의  구성,  플러그인이  갖고  있는  확장/확장점을  확인한다.

  

-  이클립스  sdk의  default  어플리케이션은  org.eclipse.ui.ide.workbench  임.

  

1.  이클립스로  툴을  만들기  

-  1.1  사용자  시나리오를  기술한다

              :  사용자  관점에서  가장  좋은  흐름을  결정하는  것  ,  활용하는  시나리오를  생각해보기

-  1.2  이클립스의  통합  점을  찾기

              :  사용할  확장점을  찾기

-  1.3  모델로부터  사용자  인터페이스  분리하기

              :  모델과  사용자  인터페이스  컴포넌트는  반드시  분리된  플러그  인으로  해야  함

                  (일반적으로  플러그인  id에  ui는  ui를  ,  모델은  core가  들어감)

              :  기동  시간을  줄일  수  있음

-  1.4  툴을  별개의  기능  그룹으로  분리하여  다른  플러그인으로  만든다

              :  성능과  메모리  양을  줄이기  위해  툴을  분리하여  따로  로딩할  수  있도록  하는  것이  필수.

  

  

2.  확장과  확장점  시작하기

2.1  확장점

-<extension-point>  새로운  확장점

-  자바  패키지  이름  형태로  된  식별자(id)를  가짐

  

2.2  확장

-<extension>  이미  정의된  확장점에  대한  기여

  

3.  플러그인을  구현하는  기본  과정

3.1  플러그인이  어떻게  플랫폼에  통합되고,  각각의  확장점(우리가  기여할)을  찾을지  결정한다.

3.2  확장점의  요구사항을  결정한다.

3.3  플러그인  설명서를  선언한다.

-  PDE의  플러그인  설명서  편집기를  사용하도록  함

3.4  확장에  대한  기능을  구현한다.

-  확장점의  저자는  반드시  구현해야  하는  메소드를  정의한  인터페이스  또는  추상  클래스를  제공한다.

3.5  플러그인  클래스를  정의한다.(옵션)

3.6  플러그인을  설치한다.

  

4.  플러그인  설명서  선언하기

-  XML로  명세됨

-  PLUGIN.XML  이름을  가져야  함

  

<plugin  
id="com.ibm.jdge2e.hellowworld"
name="hellow  hworld"
version="3.0.0"
vendor="the  haha"
class="com.ibm.jdg2e.helloworld.HelloWorldPlugin">

-  id,name,version  필수  속성
-  id는  중복  방지를  위해  ,  자바  패키지  이름의  규칙  이용
-  class는  시동/종료와  같은  생명  주기  이벤트를  통지  받기  위한  클래스  
-  class는  플러그인  클래스를  지정할  수  있음  ,  
    이것은  Plugin  또는  그것의  서브  클래스인  AbstractPlugin을  상속한  클래스  임.
    이것은  start,stop  메소드를  통해  워크벤치의  생명주기  이벤트를  통지받음.
  

<requires>
    <import  
        plugin="org.eclipse.ui"
        version="3.0.0'
        match="compatible"
        optional="false'
        export="false"  />
</requires>

-    의존적인  플러그인을  정의하는  곳
-  런타임  시,  이정보를  이용하여  플러그인이  어떤  jar  파일에  접근해야  되는지  결정한다
-  version=major,minor,service  로  구성
-  match는  매칭  알고리즘에  따라  호환  정도를  지정한다

<runtime>
    <library  name="runtime.jar">
        <export  name="*"/>
    </library>
</runtime>

  

-  런타임  코드를  정의하는  라이브러리  지정

-  자바  가시성  수정자가  클래스의  접근에  어떻게  영향을  주는지  알  수  있음  


    즉,  public으로  정의된  클래스가  다른  플러그인에는  보이지  않도록  설정할  수  있음

-  가장  실용적인  것은  내보내기(export)를  최소화  하는  것

    (  그렇지  않으면,  플러그인같에  타이트  하게  결합하여,  유연성이  감소함)




5.  플러그인  클래스  정의

-  <plugin>  태그의  class  속성  에서  플러그인  클래스를  사용함

-  Plugin  또는  이것의  서브  클래스인  AbstractUIPlugin  을  상속함

-  워크벤치  생명주기  이벤트를  start,stop  메소드를  통지  받음

-  제공  메소드

      .getStateLocation()  :  영속적인  데이터를  쓸  수  있는  파일  데렉토리를  리턴,  .metadata  서브  디렉토리를  리턴.

      .openStream()  

      .getPluginPreferences()

  

-  AbstractUIPlugin  제공  메소드

    .getImageRegisty()  

    .getDialogSettings()

    .getWorkbench()  

  

    

-  주어진  플랫폼  구성에서  잘  동작할  수  있도록  런타임에  플러그인의  서브  디렉토리는  읽기전용으로  다루어야  함

-  워크  스페이스의  .metadata\.plugins  서브  디렉토리  아래에서  플러그인관련  파일을  읽고  쓰기  위해  작업  디렉토리를  사용함

  

-  Platform.getBundle("pluginID").getEntry("/")  :  플러그인이  설치된  위치를  검색할  수  있음

  

6.  플러그인  설치

6.1  업데이트  관리자  없이  플러그인  설치하기

[플러그인  설치  구조]

-  plugins  라는  예약된  서브  디렉토리

-  그  아래  플러그인  아이디    +  버전  의  이름의  디렉토리  존재  

-  그  디렉토리  아래에는  플러그인  설명서,  plugin.xml  포함

-  JAR,HTML,이미지,프로퍼티  파일을  포함한  모든  플러그인  리소스  는  

플러그  인  설치  디렉토리  또는  상대적인  위치에  저장해야  함

-  Target  platform  설정

-  Run-time  Workbench  로  실행

-  export>  deployable  plugins  and  fragments  옵션  이용해서  새로운  서브  디렉토리에  복사하고,  이클립스의  테스트  설치본을  다시  시작함

6.2  업데이트  관리자  피처로서  플러그인을  배달하기

-  feature.xml  정의  ,  features  이름의  서브  디렉토리  존재  

  
[출처]  플러그인  개발  시작|작성자  2skfro

4610 view

4.0 stars