Adobe의 사용자 경험 전문가 AEM: OSGi bundle 구축 및 배포

7629 단어 구조 설계
CQ의 구축은 OSGi 용기를 바탕으로 하기 때문에 사용자 정의 코드와 기능은 OSGi가 제공하는 피처링을 통해 CQ에 추가할 수 있다.사용자 정의 코드를 OSGi 용기에 배치하려면 개발자가 코드를 bundle로 포장해야 합니다.OSGi bundle은 메타데이터를 추가한jar 파일일 뿐입니다.본고는 Apache Maven을 사용하여 OSGi bundle을 만드는 방법과 실행 중인 CQ 실례에 이 bundle를 배치하는 방법을 상세하게 소개할 것이다.

OSGi bundle 구축

CQ 개발자에게 OSGi bundle을 구축하는 가장 간단한 방법은 Apache Felix Bundle 플러그인을 통해 Apache Maven을 사용하는 것이다.이 플러그인은 Apache Felix팀이 Peter Kriens의 BND 도구를 기반으로 개발한 것입니다. 그럼에도 불구하고, 이 플러그인이 만든 OSGi bundle은 Felix에만 적용되는 것이 아니라, 다른 OSGi 용기에도 사용할 수 있습니다.
이 플러그인은 개발자가 Maven (명령줄이나 IDE 도구를 통해) 을 사용하여 기본적인jar 파일을 만드는 것처럼 처리할 수 있지만, bundle에 추가된 OSGi 메타데이터를 낮은 수준으로 제어할 수 있습니다.
첫 번째 단계는 패키지 스타일을 bundle로 설정하는 새로운 Maven 프로젝트를 만드는 것입니다. 물론 Apache Felix Bundle 플러그인을 추가하는 정의도 있습니다.


   4.0.0
   
       com.headwire.cqblueprints
       parent
       5.4.0-SNAPSHOT
   
   cqblueprints-examples-osgi-bundle
   bundle
    ...
   
       
           
               
                   org.apache.felix
                   maven-bundle-plugin
                   2.3.5
                   true
               
                ...
           
       
       
           
               org.apache.felix
               maven-bundle-plugin
                ...
           
       
   
    ...

다음 단계에서는 Apache Felix Bundle 플러그인을 구성합니다.
           
               org.apache.felix
               maven-bundle-plugin
               
                   
                       com.headwire.cqblueprints.examples.osgi.Activator
                       com.headwire.cqblueprints.examples.osgi
                       *;scope=compile|runtime
                       OSGI-INF/lib
                       true
                       !org.slf4j.impl,*
                   
               
           

위의 예에서는 다음과 같은 구성 항목을 설정합니다.
OSGi Bundle Activator (OSGi Bundle 생명주기에 연결된 클래스) 를 통해 Bundle가 시작되거나 닫힐 때 사용자 정의 코드를 실행할 수 있는 완전한 자바 클래스입니다.이 설정은 선택할 수 있습니다.
OSGi 용기에 노출되지 말아야 할 패키지 (예를 들어 버블이 제공하는 API 관련 기능만 포함하는 패키지).위의 예제에서는 Activator가 있는 패키지를 private로 선언합니다.
bundle을 만들 때 어떤 Maven 의존도를 삽입해야 합니까?상기 예에서 설정한 것은
*;scope=compile|runtime는 scope가compile이나runtime에 대한 모든 의존을 포함하기 때문에 이것은bundle의 정상적인 운행에 필요한 모든 종류가 될 것입니다.
버블에 이 의존항 설정을 추가하는 것을 권장합니다.대체 방법은 버블에 의존항을 삽입하지 않고 OSGi 용기에서 의존항을 가져오는 것입니다.
우리는 전자를 추천한다. 왜냐하면 다른 개발자들이 더 쉽게 버블을 사용할 수 있기 때문이다. 모든 의존을 거슬러 올라가 새로운 버블을 배치할 때 그들을 먼저 배치할 필요가 없기 때문이다.
버블을 컴파일할 때 필요하고 실행할 때 OSGi 용기에서 제공하는 의존 (예를 들어
org.osgi.framework 패키지의 모든 클래스) 는provided에 대한 scope의 설명을 해야 합니다. 그러면 버블에 삽입되지 않습니다.
끼워 넣은 제3자 패키지는 이 버블의 위치에 놓입니다.설정
OSGI-INF/lib.OSGI-INF 디렉터리는 OSGi와 관련된 다른 메타데이터를 놓을 곳입니다. 이것은 다수의 자바 개발자들이 익숙한
WEB-INF/lib 디렉토리.
이 bundle pom의 직접 의존만 삽입할 지 (삽입하려면false로 설정하십시오), 그리고pom이 설명한 의존 관계의 전달도를 삽입할 지 여부입니다. (삽입하려면true로 설정하십시오.)이 버그를 더 쉽게 처리할 수 있도록true로 설정합니다.만약 포함되지 말아야 할 의존이 있다면 (예를 들어 다른 버블이 모든 항목에 대해 볼 수 있도록 설정했을 수도 있고, 결과는 패키지 충돌일 수도 있다), Embed-dependency 탭을 사용해서 필터를 할 수 있다.
이 버블에 필요한 OSGi 용기에서 제공하는 패키지 (예를 들어 버블 자체가 필요로 하는 클래스가 포함되지 않은 경우).부족한 값을 사용하면 충분하기 때문에, 이 라벨은 보통 무시됩니다.최종 값은 버블 코드에 필요한 패키지뿐만 아니라, 이미 끼워 넣은 의존 항목에 필요한 패키지도 포함합니다.이 버블이 가져온 클래스가 OSGi 용기에 제공되지 않으면, 이 버블은 설치될 수 있지만 시작할 수 없습니다.
bundle 생성이 성공하면 이 jar에 필요한 OSGi 메타데이터가 추가됩니다
MANFIFEST.MF 파일, 모든 의존도 끼워넣기
OSGI-INF/lib 디렉토리에 있습니다.
이러한 옵션과 기타 옵션에 대한 자세한 내용은 Apache Felix Bundle 플러그인 페이지를 참조하십시오.

OSGi bundle 배포

OSGi bundle을 만드는 Maven POM을 설정한 후, 이 bundle을 실행 중인 CQ 환경에 배치하기 위해 계속 설정해야 합니다.
CQ의 구축은 Apache Sling을 기반으로 하기 때문에 이 프로젝트의 Maven 플러그인을 사용하여 OSGi bundle을 CQ에 직접 배치할 수 있습니다.Maven Sling 플러그인을 사용하면 OSGi bundle을 로컬 또는 원격 실행 중인 CQ 인스턴스에 배치할 수 있습니다.
다음에 POM에 새 프로필을 추가하고, 프로필에 플러그인 정의를 추가해서 Maven Sling 플러그인을 사용합니다.

	
		auto-deploy
		
			
				
					
						org.apache.sling
						maven-sling-plugin
						2.0.4-incubator
					
				
			
			
				
					org.apache.sling
					maven-sling-plugin
					
						
							deploy-to-cq
							install
							
								install
							
							
								${crx.url}/system/console/install
								${crx.user}
								${crx.password}
							
						
					
				
			
		
	

하나의 프로필에 슬링 플러그인을 설명하고 이 프로필에 대해 기본적으로 활성화되지 않습니다. 이것은 지정한 CQ 실례에 연결되지 않으면 싱 플러그인이 Maven 구축에 실패할 수 있기 때문입니다.Sling 플러그인을 프로필에 잃어버리면, Maven은 버블을 구축하고 발표할 수 있으며, 실행 중인 CQ 실례를 사용할 수 없습니다.
그럼에도 불구하고 재배치 환경에서 간단하게 이것을 활성화하기만 하면 된다
auto-deploy profile 을 실행하고 Maven install 을 실행할 때마다 이 bundle 은 CQ 에 자동으로 재배치됩니다.명령줄의 예는 다음과 같습니다.
mvn -Pauto-deploy clean install
대부분의 흔한 IDE (Eclipse, NetBeans 등) 는 개발자가 Maven 구축을 실행할 때 어떤 프로필을 사용할 수 있는지 설정할 수 있도록 한다.
Maven properties 사용을 통해 슬링의 연결 구성을 매개 변수화하는 것도 중요하다. 이렇게 구축하면 여러 개발자의 기기에서 쉽게 실행할 수 있지만 POM에서는 기본값을 제공해야 한다.

	http://localhost:4502
	admin
	admin

기본값을 사용할 수 없을 때 표준 Maven 기능을 사용하여 쉽게 다시 쓸 수 있습니다.서버 URL에 대한 명령줄을 한 번에 작성하여 다시 쓰는 예는 다음과 같습니다.
mvn -Pauto-deploy -Dcrx.url=http://localhost:8080 clean install
또는 더 영구적인 리셋을 해서 이property를 사용자의 settings에 직접 추가합니다.xml 파일:


...
	
	...
		
			local-crx-settings
			
				true
			
			
				http://localhost
			
		
	

Maven 구축이 실행된 후, 배치가 성공하면 이 bundle가 설치되고 시작됩니다.이 버블이 하는 일에 따라 어떤 부정적인 영향도 바로 볼 수 있을 것이다.마지막으로 관리자 콘솔의 Bundles 화면에는 다음과 같은 기본 위치가 표시됩니다.
http://localhost:4502/system/console/bundles
텍스트 링크: Building & Deploying OSGi Bundles
저자: 김종국
CQBlueprints 웹 사이트는 Adobe CQ를 사용하는 프로그래머와 개발자에게 도움을 줄 수 있도록 설계되었습니다.Adobe의 공식 사이트에는 이미 CQ에 관한 정보가 많이 있지만 그 정보는 주로 CQ 자체의 제품에 전념한다.당신이 진정으로 CQ에 정착할 때, 당신은 많은 추가 과제를 고려해야 한다. (예를 들어, 어떻게 자발적으로 개발하고, 개발한 것은 어떻게 해야만 배치 환경에서 일할 수 있습니까?)CQBlueprints 웹 사이트는 이러한 문제를 다루고 있습니다.

좋은 웹페이지 즐겨찾기