문제


Virtual box에서 리눅스(Opensuse)를 설치했는데 네트워크가 안잡히는 문제가 발생했습니다. 분명 IP는 제대로 나오는데 말이네요. 네트워크 공유를 위해 아래와 같이 세 가지 네트워크 카드를 추가했습니다. 



그런데 인터넷은 연결이 안된다. 그래서 구글신께 물어보니 역시 전세계인 중 비슷한 문제를 가진 사람이 있더군요. 



해결책


해결책은 간단합니다. 다음 파일을 삭제한 후 재시작하면 해당 파일이 재생성됩니다.  

  /etc/udev/rules.d/70-persistent-net.rules


이제 인터넷이 연결돼죠?? ㅡ.ㅡ;; 



참고


https://forums.virtualbox.org/viewtopic.php?f=7&t=43090


'컴퓨터 기술 > Linux' 카테고리의 다른 글

알아두면 유용한 명령어 Tip!  (0) 2014.03.22
우분투에서 FTP 서버 설치하기  (0) 2013.04.11
Linux Console 명령어 모음  (0) 2013.04.10
Posted by 빌리 :

VitualBox 를 사용하다 디스크 용량이 부족하다는 메시지를 만나면서 당황해버렸다. 디스크 생성할때 자동으로 늘어나는거 아니었어?? ㅡ.ㅡ; 우씨~ 


찾아보니 VitualBox를 설치하면서 같이 추가되는 VboxManage라는 프로그램을 이용해 디스크 용량을 변경할 수 있다. 

$ VBoxManage.exe modifyhd <디스크 파일 이름> --resize <용량 MB 단위>

위 프로그램은 VitualBox 설치 경로에서 찾을 수 있다. 이 경로를 Path에 등록해주는 센스가 필요함. 


그리고 리눅스의 경우 디스크 용량을 변경했다고 하더라도, 실제 설정에서 디스크 파티션을 변경해주어야 실제 디스크 용량이 변경된다.


** 파티션 변경은 다음 유틸리티를 이용해 변경할 수 있다. 

GParted

http://gparted.org/livecd.php



Posted by 빌리 :

tail -f [파일명]

로그 파일을 확인할 때 유용하다. 이 명령어를 이용해 로그 파일을 확인하면 로그가 갱신되는 모습이 화면에 출력된다. tail 명령어를 반복 수행해서 로그가 어떻게 변경됐는지 볼 필요 없으니까... 



> [파일명]

비어있는 파일을 생성해야 할때 redirection output ('>') 연산자를 이용해 비어있는 파일을 생성할 수 있다.

linux-qvv1:~/tmp # > testfile

linux-qvv1:~/tmp # ll

total 0

-rw-r--r-- 1 root root 0 Mar 22 01:28 testfile

linux-qvv1:~/tmp #



Posted by 빌리 :

Open Build Service를 들어보셨나요? 

Open Build Service(http://openbuildservice.org/) 일명 OBS를 간략히 소개해 드립니다. OBS는 openSUSE 프로젝트로 바이너리 패키지를 빌드하고 배포하는 범용 시스템입니다. OBS를 활용하게 되면 넓은 범위의 운영체제(Linux), 하드웨어 아키텍쳐(예:arm, i586 등)를 위한 업데이트, 추가 기능, 제품에 대한 패키지 들을 릴리즈 할 수 있습니다. 예를 들면 하나의 소스로 arm용 바이너리와 i586용 바이너리를 빌드해서 배포할 수 있다는 것이죠.



현재 오픈수세 관련 패키지들을 위해 http://build.opensuse.org 사이트에서 약 3만명의 사용자들이 140,000 패키지들을 사용하고 있다고 합니다. 그리고 TizenVideoLan과 같은 오픈소스 프로젝트의 빌드 시스템으로 사용하고 있습니다.


OBS 프로젝트의 큰 특징 중 하나는 패키지 빌드를 수행할 수 있고, 패키지의 의존성을 파악해 관련있는 패키지도 자동으로 갱신하면서 빌드를 해준다는 것입니다. 


기능적인 측면에서 보면 프로그래밍에서 협업을 하면서 가장 큰 문제가 되는 의존성에 대한 대안으로 사용할 수 있다고 할 수 있습니다. 하지만 시스템 운영 측면에서 보면 큰 단점이 하나 있습니다. 그것은 바로 부실한 메뉴얼입니다. 한마디로 맨땅에 해딩하면서 문제를 해결해야 한다는 것이죠. 물론 OBS 프로젝트는 계속 수정되고 개선되고 있지만 그에 대한 가이드나 문제가 발생했을때 해결책을 찾기란 많이 어렵습니다.


그리고 VideoLan의 경우 OBS의 frontend 서비스를 직접 만들고, backend 서비스로 OBS기능을 이용하여 서비스를 제공하는 모습이 특이했습니다. 저도 조금 더 역량을 키워 backend기능을 활용해 자신에게 맞는 frontend서비스를 구축 하고 싶네요. 




https://github.com/openSUSE/open-build-service

http://openbuildservice.org/about/

http://nightlies.videolan.org/

https://build.tizen.org/


'개발자 > Tizen Build Infra' 카테고리의 다른 글

OBS - Open Build Service 서비스 시작  (0) 2014.03.19
Posted by 빌리 :

OpenSUSE 12.1/12.3 기준

OBS(http://www.openbuildservice.org/) 서비스를 운영하기 위해선 각 컴포넌트들을 순서대로 실행하고, 다시 역순으로 프로그램을 종료해야 최대한 문제를 줄일 수 있다. 


이 중 memcache나 obs warden 컴포넌트의 경우 실행하지 않아도 OBS 실행에 지장이 없다.


서비스 시작 

rcmemcached start     # optional

rcmysql start

rcobsrepserver start

rcobssrcserver start

rcobsscheduler start

rcobsworker start

rcobsdispatcher start

rcobspublisher  start

rcobswarden start      # optional

rcapache2 start

rcobsapidelayed start


서비스 종료

rcapache2 stop

rcobsapidelayed stop

rcobswarden stop       # optional

rcobspublisher  stop

rcobsdispatcher stop

rcobsworker stop

rcobsscheduler stop

rcobssrcserver stop

rcobsrepserver stop

rcmysql stop

rcmemcached stop       # optional


서비스 상태 보기

rcmemcached status  

rcmysql status

rcobsrepserver status

rcobssrcserver status

rcobsscheduler status

rcobsworker status

rcobsdispatcher status

rcobspublisher  status

rcobswarden status

rcapache2 status

rcobsapidelayed status


'개발자 > Tizen Build Infra' 카테고리의 다른 글

Open Build Service란?  (0) 2014.03.22
Posted by 빌리 :

2012년 배터리 전장 부품을 제조하는 회사에 개발 프로세스와 그 프로세스를 뒷받침해 줄 수 있는 PTC Integrity라는 시스템을 적용하는 일을 한적이 있었는데 그 때 시스템을 설치하는 방법을 정리한 글입니다.


PTC Integrity 설치 방법 정리(2012년 기준)

I. 기본 환경 설정 

1. Database가 TCP/IP 사용가능한지 설정 확인(SQL Server 기준)

2. Database 생성 및 관리 계정 생성 : 관리 계정은 생성된 DB의 Owner로 지정

3. Flex Licence Server 설치 (Floating license 관리를 위해 사용)

1) 제공된 Disk에서 Flex 폴더 전체를 로컬 위치에 복사

2) 라이센스 파일을 Flex 폴더로 복사

- 파일 내 첫 줄에 서버 정보를 Host Name 또는 IP로 변경 (라이센스가 IP 제한이 있는 경우)

3) Flex 폴더의 setup 프로그램 실행

- LMTOOL 

-> Config Service 창 확인

-> Service 명 지정

-> lmgrd.exe 파일 위치 지정

-> licence 파일 위치 지정(2번에 복사한 파일)

-> Log 파일 위치 지정

-> Service 실행

4) Flex 실행 확인 : 3)에서 지정한 로그 파일 확인

4. OS에 맞는 Integrity Server 설치

1) 시리얼 입력 : XXXXXXX

2) 라이센스 파일 위치 지정

3) 서버 선택에서 Full Server 선택

4) 서버 타입 선택에서 "Both"로 지정

5) 1에서 생성한 Database 정보 입력


II. Integrity 서버 설정

1. 설정 파일 수정

1) Integrity설치 경로/config/properties/is.properties 파일 수정

- 라이센스 타입을 파일 대신 License 서버로 변경

-> mksis.licensePath=[License Server IP or Host]

ex) mksis.licensePath=27000@127.0.0.1

2) Integrity설치 경로/config/properties/security.properties 파일 수정

- 컴퓨터 Domain에 연결된 로컬 사용자 정보를 읽지 못하게 변경(자체 계정 관리 사용시)

-> mks.security.policy.scheme.default=mksdomain_clear

3) 초기 사용자/그룹 설정을 위한 파일 수정 : 서버가 실행되면 생성된 파일을 자동으로 읽어 사용자와 그룹을 추가한 후 파일이 삭제된다. 

Integrity설치 경로/data/group.properties         #그룹 / 사용자 등록

- Integrity설치 경로/data/password.properties     # 사용자 암호 등록

2. Integrity Server 서비스 실행 (service.msc에서 실행가능)

-> 실행이 제대로 되었는지 Log 확인 :  Integrity설치 경로/log/server.log


III. Integrity Client 설정

1. Client 설치

1) 서버 타입 선택 : Both

2) Server 설정 : 서버 IP, Port(default:7001)

Posted by 빌리 :

Windows Server
AD DS(Active Directory Domain Services)

개발을 하다가 윈도우 서버의 AD DS에 대해 설정할 필요가 있어서 간략하게 나마 개념을 정리해 봅니다.


책에서 정의하길 

AD DS는 조직의 사용자와 리소스에 대한 안전한 디렉토리 서비스를 제공합니다. 사용자와 컴퓨터 관리, 그리고 인증에 대한 중앙 집중 디렉토리라고 부릅니다. 디렉토리는 사용자 개체, 그룹 개체, 그리고 서비스 정보를 포함하고 있습니다. 이는 네트워크 리소스에 대한 접근 관리와 인증 제공뿐만 아니라, 서비스가 이러한 개체에 대한 정보를 제공할 수 있게 합니다.

라고 말하고 있습니다.


?? 


위 설명을 읽으면서 무슨 말을 하는지 이해가 되지 않더군요. 디렉토리 서비스는 뭘까? 장황하게 설명이 되어있는 반면 머리 속에 확 와 닿지 않더군요. 읽고, 읽고, 또 읽고 나서 책의 내용도 몇번 더 훑어본 후 나름 스스로 이해한 내용을 정리하자면 다음과 같습니다. 


    • 여러 컴퓨터에서 각각의 컴퓨터에 동일한 사용자 ID를 사용해 로그인 할 수 있는 서비스
    • 조직이나 사용자는 계층적인 관리를 위해 디렉토리 구조를 사용

두 문장으로 만들어보니 'SSO(Single Sign-On) 기능을 지원하기 위한 윈도우용 계정 관리 서비스'라는 결론이 나오더군요. 그리고 계정 정보에 부과적으로 시스템 자원에 대한 접근 권한 설청 정보가 부과적으로 들어가 있는 것이라고 이해를 했습니다. 


평소에 공부를 안해서 그런지 몰라도, 간단한 문장을 여러번 읽어도 이해가 안가는 개념이지만, 더 볼게 있나 해서 관련된 개념을 살펴보려했는데, 개발자인 본업의 범위를 벗어나는 용어들이 많더군요. 일단 개발자라면 해당 서비스가 뭐하는건지 간단히 이론적으로만 알고 있으면 되지않을까 하는 생각에 AD DS의 설명은 이만 줄이겠습니다.

Posted by 빌리 :

1. 형상관리에 대해

 오늘은 소프트웨어 개발에서 기본이 되는 형상관리에 대해서 알려 드리겠습니다. 형상관리(CM : configuration management)라고 들어보셨나요? 소프트웨어 공학을 배우신 분들에게는 익숙하겠지만, 그렇지 않으신 분들에게는 매우 생소한 단어라 생각 됩니다. 이미 배우신 분들은 형상관리가 범위도 다양하고 복잡하다는 걸 알고 있을 텐데, 오늘은 그 중에 개발자들에게 익숙한 소프트웨어 형상관리, 다른 말로 하면 소스 버전 관리에 대해 알아 보도록 하겠습니다.


 소프트웨어 형상관리는 Software Configuration Management, 줄여서 SCM라는 단어를 쓰기도 하는데, SW개발 및 유지보수 과정에서 발생하는 소스코드, 문서, 인터페이스 등 각종 결과물에 대해 형상을 만들고, 이들 형상에 대한 변경을 체계적으로 관리, 제어하기 위한 활동입니다. 단순히 말하자면 프로젝트를 진행하면서 생성하는 소스코드를 CVS나 SVN, 또는 GIT와 같은 버전 관리 시스템을 이용하는 것을 말합니다.


 다수의 개발자가 프로젝트에서 동일한 기능을 동시에 개발한다고 할 때, 작성된 소스 코드와 변경사항을 확인하고, 수정하는 협업을 도와주는 시스템이라고 할 수 있습니다.


 참고로 공급망 관리를 지칭하는 Supply Chain Management(SCM)과 동일한 약어를 사용하니, 누가 SCM에 대해 물어본다면, 어떤 SCM을 말하는 것인지 확인을 하고 대답해 주세요. ^^


 그럼 오늘은 소프트웨어 형상관리에서 버전 관리 시스템을 왜 사용해야 하는지, 어떤 개념들이 있는지, 그리고 어떠한 시스템들이 있는지 알아보도록 하겠습니다.


2. 왜 버전 관리 시스템이 필요한가?

 프로그램을 만들다 보면, 잘못 만들어서 다시 소스코드를 이전 상태로 되돌릴 필요도 있고, 변경된 이력을 확인할 필요가 있습니다. 그리고 여러 명의 개발자들이 동시에 같은 소스코드를 개발하면서 발생하는 충돌에 대한 처리도 필요합니다. 이러한 것을 하기 위해 무엇이 필요할까요? 바로 버전 관리 시스템입니다.


 과거와 달리 현재의 소프트웨어는 더 복잡해지고, 더 쉽게 변경됩니다. 만약 소프트웨어 버전관리 시스템을 사용하지 않는다면, 다른 개발자가 무엇을 했는지 알 길이 없으며, 실수를 쉽게 되돌릴 수도 없습니다.


 버전 관리 시스템이 없던 과거에는, 다음과 같이 누구 책임인지 싸우느라 시간을 허비 했을지도 모릅니다.

 버전 관리가 필요한 이유를 정리하면 다음과 같습니다.

  • 개발 하는 동안 소스 코드의 변경 사항을 보존하기 위해
    • 버그 및 문제점이 발생했을 때 추적에 유용
    • 과거 특정 시점의 소스 파일 및 디렉토리의 내용을 손쉽게 확인 가능
    • 과거 특정 시점의 소스 파일로 손쉽게 되돌릴 수 있음


  • 협동 작업을 가능하게 하기 위해
    • 대부분의 프로젝트는 팀 단위이기 때문에 전체 팀원이 하나의 소스를 가지고 효율적으로 작업할 수 있는 도구가 필요함
    • 인터넷을 이용한 전세계 개발자들이 협업을 하여 개발하는 오픈 소스 프로젝트에 필수

 

3. 버전 관리 시스템의 기본 개념

문제 #1: 협업하기

 두 명 이상의 사람들이 똑같은 소스코드를 같은 시간에 편집해야 한다면 어떻게 해야 할까요?

대안 1

누가 수정을 할지 순서를 정한다.

한 번에 한 사람만 작업을 할 수 있다.

규칙을 어떻게 지킬 수 있도록 할 수 있을까?

대안 2

작업을 각자 한 후 차이점을 찾아 수정한다.

차이점을 찾고 수정하기 위해 수많은 재 작업이 필요하다.

재 작업 시 소스코드가 손실 될 수 있다.

 

해결책

 버전 관리 시스템은 개발자들이 동일한 소스 코드를 동시에 수정하거나 수정된 내용을 쉽게 공유할 수 있는 기능을 제공합니다.

  • 중앙 저장소(Repository)에 메인 소스 코드를 저장해 놓습니다.
  • 여러 명의 개발자들은 각자 로컬 PC에 중앙 저장소에 저장되어 있는 소스 코드를 작업 디렉토리(Working Copy)에 사본을 복사해 소스 코드를 수정합니다.
  • 개발자들이 소스 코드 수정을 끝낸 후, 소스 코드를 공유하기 위해서 중앙 저장소로 소스코드를 커밋(Commit) 합니다.
  • 다른 개발자는 변경된 내용을 확인 하기 위해서 중앙 저장소의 소스를 작업 디렉토리로 갱신(Update) 되도록 명령을 수행합니다.



문제 #2: 수정 사항 되돌리기

 간혹 수정하던 소스 코드를 다음과 같은 이유로 이전 상태로 돌아갈 필요가 생깁니다.

  • 개발을 시작한 후 시간이 지나, 잘못된 구현을 하고 있다는 것을 알게 되었을 때
  • 이전 상태로 되돌리면서 모든 파일에 대한 변경 이력(History)를 유지하고 싶을 때
  • 소스 코드가 언제, 무엇을, 그리고 누가 수정했는지 알고 싶을 때
    ->누군가 작성한 소스 코드를 이해하는 가장 좋은 방법은 작성한 사람에게 물어보는 것입니다.

 

해결책

 버전 관리 시스템은 개발자들이 수정한 소스 코드에 대한 리비전(Revision)을 관리합니다. 리비전은 수정 시간, 수정한 사람, 수정한 내용들을 포함하고 있어, 개발자들에게 편리한 정보를 제공하고 있습니다.


 또한 되돌리기(Roll back) 기능이 있어 특정 리비전 또는 특정 시간으로 소스코드를 되돌릴 수 있습니다.

 

위 두 가지 문제를 보면서 버전 관리 시스템의 기본적인 개념을 설명 드렸습니다. 그리고 위에서 나온 용어들을 정리하면 다음과 같습니다.

용어

설명

중앙 저장소(Repository)

원본 소스를 저장하고 있는 저장소를 의미합니다.

작업 디렉토리(Working Copy)

원본 저장소로부터 체크아웃을 통해 내려 받은 내 로컬 PC에 있는 작업 사본 디렉토리를 의미합니다.

커밋(Commit)

작업 디렉토리에서 변경, 추가 및 삭제된 파일을 원본 저장소인 서버에 적용하는 것을 말합니다.

갱신(Update)

체크아웃을 받은 작업 디렉토리를 원본 저장소의 가장 최신 커밋된 버전까지 업데이트하는 명령어입니다.

리비전(Revision)

소스 파일을 수정하여 커밋하게 되면 일정한 규칙에 의해 숫자가 증가합니다. 저장소에 저장된 각각의 파일 버전이라 할 수 있습니다.

되돌리기(Roll Back)

작업 디렉토리에 저장되어 있는 사본을 특정 리비전 또는 특정 시간으로 복원할 수 있도록 하는 명령어입니다.

 

 위 용어들은 다양한 버전 관리 시스템에서 다양한 용어로 대체되어 사용됩니다. 예를 들면 작업 디렉토리(working Copy)는 작업 공간(Workspace)라는 단어로, 커밋(Commit)은 체크인(Check-In)이라는 단어가 사용되기도 하니 버전 관리 시스템을 사용하기 전에 어떤 단어가 위의 기능들과 매핑 되는지 확인해야 합니다.


4. 버전 관리 시스템의 종류

 버전 관리 시스템은 상용과 비상용(오픈소스)로 구분 할 수 있습니다.

  • 상용
    • IBM Rational ClearCase
    • Perforce
    • PTC Integrity
  • 비상용(오픈소스)
    • Subversion(SVN)
    • CVS
    • Git

 위에 나열한 시스템 외에도 수많은 버전 관리 시스템이 있습니다. 버전 관리라는 동일한 목표를 가지고 있지만, 각각의 시스템들은 특색을 가지고 있어, 그 특색에 따라 툴을 사용하는 방법들이 상이합니다. 그리고 상용 프로그램들은 가격이 정말 비쌉니다. 프로그램 라이선스가 1년에 1명 사용하는데 수백만원을 넘기니 말이죠. 그리고 최근 오픈 소스 프로젝트의 대부분은 Git를 사용하고 있습니다. 참고로 예전에는 SVN을 주로 사용했습니다. 여러분이 오픈 소스에 관심 있으시면 Git-Hub(http://git-hub.com/) 사이트를 둘러 보시면 도움이 될 것 입니다.


5. 글을 마치며

 버전 관리 시스템은 아마추어 개발자와 전문 개발자를 구분하는 것 중에 하나라고 합니다. 프로젝트를 혼자서 하는 경우도 있고, 몇 명이 나누어서 진행하는 경우도 있습니다. 늘 일정에 쫓기다 보니 '바빠 죽겠는데 버전 관리까지 어떻게 해?'라고 생각하시는 분들도 있을 것입니다. 하지만 일주일 동안 온 힘을 다한 소스 코드를 실수로 날려 버린 경험을 가지신 분들은 버전 관리 및 소스 코드 백업의 필요성을 느끼실 것 입니다.


 소스 코드 버전 관리는 정말 유용합니다. 처음 익숙해 질 때 어려움은 있지만, 시간이 조금 더 지나면 버전 관리에 대한 보상을 금방 얻으실 수 있습니다. 요즘 사람들이 많이 쓰는 Git로 버전 관리를 시작해 보시겠어요?

'소프트웨어 공학 > 형상관리' 카테고리의 다른 글

GIT란?  (0) 2013.05.10
Posted by 빌리 :

보호되어 있는 글입니다.
내용을 보시려면 비밀번호를 입력하세요.

Eclipse RCP를 개발하면서 Target을 3.6 이하 버전으로 사용하다가 3.7 이후 버전을 사용하도록 변경한다면 화면 상단 툴바에 Quick Access가 무조건 나타나면서 원치 않는 UI를 노출 시키는 문제가 발생합니다.  


Quick Access 노출을 조정할 수 있는 액션이나 메뉴가 없는 상태입니다. 4.4 버전부터는 만든다는 것 같지만 현재까진 해결책이 없네요.



Quick Access를 없애기 위한 해결책을 보도록 하겠습니다. 


1. 자신의 RCP에 plugin.xml에서 다음 패키지 의존성을 추가한다.

    • org.eclipse.e4.ui.model.workbench


2. ApplicationWorkbenchWindowAdvisor.java 파일에 다음 코드를 추가한다.

package com.billy.snippet.quickaccess;

import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Status;
import org.eclipse.e4.ui.model.application.ui.basic.MTrimBar;
import org.eclipse.e4.ui.model.application.ui.basic.MTrimElement;
import org.eclipse.swt.graphics.Point;
import org.eclipse.ui.IWorkbenchWindow;
import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.application.ActionBarAdvisor;
import org.eclipse.ui.application.IActionBarConfigurer;
import org.eclipse.ui.application.IWorkbenchWindowConfigurer;
import org.eclipse.ui.application.WorkbenchWindowAdvisor;
import org.eclipse.ui.internal.WorkbenchWindow;
import org.eclipse.ui.progress.UIJob;

public class ApplicationWorkbenchWindowAdvisor extends WorkbenchWindowAdvisor {

    public ApplicationWorkbenchWindowAdvisor(IWorkbenchWindowConfigurer configurer) {
        super(configurer);
    }

    public ActionBarAdvisor createActionBarAdvisor(IActionBarConfigurer configurer) {
        return new ApplicationActionBarAdvisor(configurer);
    }
    
    public void preWindowOpen() {
        IWorkbenchWindowConfigurer configurer = getWindowConfigurer();
        configurer.setInitialSize(new Point(600, 400));
        configurer.setShowCoolBar(true);
        configurer.setShowStatusLine(false);

        // This code
        hideQuickAccess();
    }

	private void hideQuickAccess() {
		UIJob job = new UIJob("Hide quick access") {
			@Override
			public IStatus runInUIThread(IProgressMonitor monitor) {
				IWorkbenchWindow window = PlatformUI.getWorkbench().getActiveWorkbenchWindow();
				if (window instanceof WorkbenchWindow) {
					MTrimBar topTrim = ((WorkbenchWindow) window).getTopTrim();
					for (MTrimElement element : topTrim.getChildren()) {
						if ("SearchField".equals(element.getElementId())) {
							element.setVisible(false);
							element.setToBeRendered(false);;
							break;
						}
					}
				}
				return Status.OK_STATUS;
			}
		};
		
		job.schedule();
	}
    
}


아래와 같이 Quick Access가 없어진 것을 보실 수 있습니다.



샘플 프로젝트 코드는 아래에서 받으면 됩니다.

removeQuickAccess.zip


Tip


Quick Access를 지우니, Toolbar layout이 흐트러 질때는 다음을 확인합니다.

    • 기여한 Toolbar action이 'main'에 추가되었나요?


protected void fillCoolBar(ICoolBarManager coolBar) {
	IToolBarManager toolbar = new ToolBarManager(SWT.FLAT | SWT.RIGHT);
	coolBar.add(new ToolBarContributionItem(toolbar, "main"));   // main
        //coolBar.add(toolbar);
	toolbar.add(openViewAction);
	toolbar.add(messagePopupAction);
}


위와 같이 main이 아닌 Toolbar를 단순히 coolBar에 추가하게 되면, Layout이 흐트러집니다. 


Posted by 빌리 :