SWC로 Flex 라이브러리를 배포할때 그 내부에는 다른 프로젝트에서 직접 접근하는 것을 방지하고 싶은 핵심클래스들도 포함되는 경우가 다분하다. 이런 경우 그런 클래스 앞에 [ExcludeClass]를 사용하면 이 클래스가 포함된 SWC를 사용하는 프로젝트에서는 코드 힌트(code hint)를 통해 클래스를 직접 볼 수 없게 된다.


package com.starpl.example

{

        import mx.core.UIComponent;

        [ExcludeClass]

        public class MyComponent extends UIComponent

        {

               …(생략)

        }

}


위와 같이 MyComponent 클래스를 만들고 SWC를 배포한 Flex Project나 AIR Project에서는 이 클래스가 외부로 노출이 되지 않기 때문에 사용할 수 없게된다.

Flex SDK를 직접보면 이런 클래스들을 볼 수 있는데, 그 중에 mx.core.ApplicationGlobals 를 보면 다음과 같다.

package mx.core
{

        [ExcludeClass]

 

        public class ApplicationGlobals

        {

              public static var application:Object;

        }

}



이 클래스는 Flex Builder에서 import mx.core. 까지 입력해도 ApplicationGlobals가 코드 힌트(code hint)로 나오지 않는다. [ExcludeClass]로 인해 가려졌기 때문이다. 그러나 import mx.core.ApplicationGlobals 로 완성된 문장을 쓰면 사용할 수는 있다. 즉 SWC 내부에 [ExcludeClass]로 작성된 Class는 작성자 외에는 직접적으로 사용자가 알 수 없다는 뜻이지 SWC안에 이 클래스가 포함되지 않는다는 것을 뜻하지 않는다.

잘 사용하면 제작된 라이브러리를 사용하는 사람들로 하여금 오용의 소지를 줄여줄 수 있겠다.

글쓴이 : 지돌스타(http://blog.jidolstar.com/373)

Posted by 지돌스타.

Leave your greetings here.

  1. Comment RSS : http://blog.jidolstar.com/rss/comment/373
  2. 찬익 2008/09/23 22:37  Modify/Delete  Reply  Address

    Exclude, ExcludeClass, Inspectable등의 일부 메타데이터 태그는, 빌더에서만 동작한다는게 조금 아쉽습니다.
    mxmlc에서도 컴파일시 에러 또는 경고를 보여주면 더 좋을 것 같다는 생각이...
    전 이미 빌더를 구입해서 상관 없지만서도.. ㅎㅎㅎ;

    • 지돌스타 2008/09/23 22:40  Modify/Delete  Address

      전 빌더만 사용해서 아쉽다는 생각이 전혀 안든다는 ㅋㅋㅋ ^^

    • 찬익 2008/09/23 23:06  Modify/Delete  Address

      ExcludeClass를 사용해서 코드 넘겨주면 꼭 써보는 친구들이 있어요 ㅎㅎ
      internal Class만으로는 한계가 있고..
      게다가 이런 문제는 한참 뒤에나 발견이되기 때문에, 그간 개발된 다른 작업물들하고 엮여서 피를 토하기도 하는..;;

  3. okgosu 2008/09/24 00:35  Modify/Delete  Reply  Address

    잘 배우고 갑니다 ^_^
    ExcludeClass태그를 쓸때는 클래스 설게를 잘해야겠군요....

  4. 꽃녀 2008/09/24 09:34  Modify/Delete  Reply  Address

    헐... 하나 배웠네염 ^^

  5. 검쉰 2008/09/24 21:59  Modify/Delete  Reply  Address

    ArrayList 쓰는 저 같은 넘도 있......ㅋ

[로그인][오픈아이디란?]
Flex에서 Flex Library Project로 SWC를 만들게 된다.
이때, 제작된 Class들은 각자의 namespace안에 들어가 있으므로 Flex Project에서 아래와 같이 사용해야할 것이다.

<?xml version="1.0" encoding="utf-8"?>

<mx:Application

        xmlns:mx="http://www.adobe.com/2006/mxml"

        xmlns:map="com.starpl.map.*"

        xmlns:minimap="com.starpl.map.minimap.*"

        xmlns:controller="com.starpl.map.controller.*"

        layout="absolute">

        <map:Map/>

        <minimap:MiniMap/>

        <controller:ZoomControl/>

</mx:Application>

 


위 코드에서 볼 수 있듯이 Map, MiniMap, ZoomControl 컴포넌트들은 각각 다른 namespace(각각 map,minimap,controller)를 가지게 되기 때문에 사용하기 번거롭다.

<?xml version="1.0" encoding="utf-8"?>

<mx:Application

        xmlns:mx="http://www.adobe.com/2006/mxml"

        xmlns:map="http://www.starpl.com/2008/mxml"

        layout="absolute">

        <map:Map/>

        <map:MiniMap/>

        <map:ZoomControl/>

</mx:Application>


위 코드처럼 Flex SDK에서 제공하는 컴포넌트에서 mx를 사용하듯이 namespace인 map으로 사용하고 싶다면 다음과 같은 과정을 따라서 SWC를 만들면 되겠다.

1. 컴포넌트 제작

Flex Library Project를 만들고 위에서 src폴더에 com.starpl.map.Map, com.starpl.map.minimap.MiniMap, com.starpl.map.controller.ZoomControl 을 만든다.


2. manifest 목록 작성

src폴더에 manifest XML 파일을 작성한다. 나는 starplmap-manifest.xml 이름으로 다음과 같이 작성했다.

<?xml version="1.0"?>

<componentPackage>

    <component id="Map" class="com.starpl.map.Map"/>

    <component id="MiniMap" class="com.starpl.map.minimap.MiniMap"/>

    <component id="ZoomControl" class="com.starpl.map.controller.ZoomControl"/>

</componentPackage>




3. Project에 작성한 manifest를 컴파일 옵션에 추가

메뉴에서 Project > Properties 를 선택하고 창 왼쪽 메뉴의 Flex Library Complier를 선택하면 아래와 같은 화면을 볼 수 있다.

아래 Namespace URL과 Manifest file을 아래와 같이 등록하고 OK 버튼을 누르면 되겠다.

사용자 삽입 이미지


위와 같이 하면 프로젝트의 .flexLibProperties 파일에 아래와 같은 태그가 자동으로 삽입된다.

<namespaceManifests>

<namespaceManifestEntry manifest="starplmap-manifest.xml" namespace="http://www.starpl.com/2008/mxml/map"/>

</namespaceManifests>



4. SWC 배포

bin 폴더에 만들어진 swc파일을 다른 프로젝트의 Lib에 적용해서 사용하면 되겠다.


관련자료

[FLEX] flex-config.xml
flex 사용자정의 manifest 만들기 


글쓴이 : 지돌스타(http://blog.jidolstar.com/372)
Posted by 지돌스타.

Leave your greetings here.

  1. Comment RSS : http://blog.jidolstar.com/rss/comment/372
  2. 찬익 2008/09/23 22:29  Modify/Delete  Reply  Address

    우웃... 이 금단의 비법을 공개하시다니 ㅋㅋ
    '있어보이는 라이브러리' 만들기 중 하나인 manifest 설정 ㅎㅎ

  3. 검쉰 2008/09/24 21:58  Modify/Delete  Reply  Address

    오홋!!! 유용하군요!

[로그인][오픈아이디란?]