타사 아티팩트 설치 - 공개 Maven 저장소에서 사용할 수 없음

AEM 프로젝트를 빌드하고 배포할 때 공용 Maven 저장소에서 사용할 수 없는 타사 아티팩트를 설치하는 방법 ​을 알아봅니다.

타사 아티팩트 ​는 다음과 같을 수 있습니다.

  • OSGi 번들: OSGi 번들은 Java 클래스, 리소스 및 번들과 해당 종속성을 설명하는 매니페스트를 포함하는 Java™ 보관 파일입니다.
  • Java jar: Java 클래스와 리소스가 포함된 Java™ 아카이브 파일입니다.
  • 패키지: 패키지는 파일 시스템 직렬화 양식의 저장소 콘텐츠가 들어 있는 zip 파일입니다.

표준 시나리오

일반적으로 공개 Maven 저장소에 AEM 프로젝트의 pom.xml 파일에 종속성으로 사용할 수 있는 ​타사 번들을 설치합니다.

예:

  • AEM WCM 핵심 구성 요소 번들 ​이(가) WKND 프로젝트의pom.xml 파일에 종속성으로 추가되었습니다. 여기서 provided 범위는 AEM 런타임에서 AEM WCM 핵심 구성 요소 번들을 제공할 때 사용됩니다. AEM 런타임에서 번들을 제공하지 않으면 compile 범위를 사용하게 되며 기본 범위입니다.

  • WKND 공유 패키지 ​가 WKND 프로젝트의pom.xml 파일에 종속성으로 추가되었습니다.

드문 시나리오

경우에 따라 AEM 프로젝트를 빌드하고 배포할 때 Maven 중앙 저장소 또는 Adobe 공용 저장소에 사용할 수 없는 서드파티 번들 또는 jar 또는 패키지를 설치해야 할 수 있습니다.

이유는 다음과 같습니다.

  • 번들 또는 패키지는 내부 팀이나 타사 공급업체에서 제공하며 은(는) 공용 Maven 저장소에서 사용할 수 없습니다.

  • Java™ jar 파일 은(는) OSGi 번들 ​이(가) 아니므로 공용 Maven 저장소에서 사용할 수 있거나 사용할 수 없을 수 있습니다.

  • 공개 Maven 저장소에서 사용할 수 있는 최신 버전의 타사 패키지에 아직 릴리스되지 않은 기능이 필요합니다. 로컬로 빌드된 RELEASE 또는 SNAPSHOT 버전을 설치하기로 결정했습니다.

사전 요구 사항

이 자습서를 수행하려면 다음이 필요합니다.

설정

  • AEM 6.X 또는 AEMCS(AEM as a Cloud Service) 로컬 개발 환경 또는 RDE 환경을 설정합니다.

  • AEM WKND 프로젝트를 복제하고 배포합니다.

    code language-none
    $ git clone git@github.com:adobe/aem-guides-wknd.git
    $ cd aem-guides-wknd
    $ mvn clean install -PautoInstallPackage
    

    WKND 사이트 페이지가 올바르게 렌더링되는지 확인합니다.

AEM 프로젝트에 서드파티 번들 설치 install-third-party-bundle

공개 Maven 저장소에서 사용할 수 없는 데모 OSGi my-example-bundle을(를) AEM WKND 프로젝트에 설치 및 사용하겠습니다.

my-example-bundle ​이(가) HelloWorldService OSGi 서비스를 내보냅니다. 해당 sayHello() 메서드가 Hello Earth! 메시지를 반환합니다.

자세한 내용은 my-example-bundle.zip 파일의 README.md 파일을 참조하십시오.

all 모듈에 번들 추가

첫 번째 단계는 AEM WKND 프로젝트의 all 모듈에 my-example-bundle을(를) 추가하는 것입니다.

  • my-example-bundle.zip 파일을 다운로드하여 추출하십시오.

  • AEM WKND 프로젝트의 all 모듈에서 all/src/main/content/jcr_root/apps/wknd-vendor-packages/container/install 디렉터리 구조를 만듭니다. /all/src/main/content 디렉터리가 있습니다. jcr_root/apps/wknd-vendor-packages/container/install 디렉터리만 만들면 됩니다.

  • 추출된 target 디렉터리에서 위의 all/src/main/content/jcr_root/apps/wknd-vendor-packages/container/install 디렉터리로 my-example-bundle-1.0-SNAPSHOT.jar 파일을 복사합니다.

    모든 모듈의 타사 번들

번들의 서비스 사용

AEM WKND 프로젝트의 my-example-bundle에서 HelloWorldService OSGi 서비스를 사용해 보겠습니다.

  • AEM WKND 프로젝트의 core 모듈에서 SayHello.java Sling 서블릿 @ core/src/main/java/com/adobe/aem/guides/wknd/core/servlet을(를) 만듭니다.

    code language-java
    package com.adobe.aem.guides.wknd.core.servlet;
    
    import java.io.IOException;
    
    import javax.servlet.Servlet;
    import javax.servlet.ServletException;
    
    import org.apache.sling.api.SlingHttpServletRequest;
    import org.apache.sling.api.SlingHttpServletResponse;
    import org.apache.sling.api.servlets.HttpConstants;
    import org.apache.sling.api.servlets.ServletResolverConstants;
    import org.apache.sling.api.servlets.SlingSafeMethodsServlet;
    import org.osgi.service.component.annotations.Component;
    import org.osgi.service.component.annotations.Reference;
    import com.example.services.HelloWorldService;
    
    @Component(service = Servlet.class, property = {
        ServletResolverConstants.SLING_SERVLET_PATHS + "=/bin/sayhello",
        ServletResolverConstants.SLING_SERVLET_METHODS + "=" + HttpConstants.METHOD_GET
    })
    public class SayHello extends SlingSafeMethodsServlet {
    
            private static final long serialVersionUID = 1L;
    
            // Injecting the HelloWorldService from the `my-example-bundle` bundle
            @Reference
            private HelloWorldService helloWorldService;
    
            @Override
            protected void doGet(SlingHttpServletRequest request, SlingHttpServletResponse response) throws ServletException, IOException {
                // Invoking the HelloWorldService's `sayHello` method
                response.getWriter().write("My-Example-Bundle service says: " + helloWorldService.sayHello());
            }
    }
    
  • AEM WKND 프로젝트의 루트 pom.xml 파일에서 my-example-bundle을(를) 종속성으로 추가합니다.

    code language-xml
    ...
    <!-- My Example Bundle -->
    <dependency>
        <groupId>com.example</groupId>
        <artifactId>my-example-bundle</artifactId>
        <version>1.0-SNAPSHOT</version>
        <scope>system</scope>
        <systemPath>${maven.multiModuleProjectDirectory}/all/src/main/content/jcr_root/apps/wknd-vendor-packages/container/install/my-example-bundle-1.0-SNAPSHOT.jar</systemPath>
    </dependency>
    ...
    

    여기:

    • system 범위는 공용 Maven 저장소에서 종속성을 조회해서는 안 됨을 나타냅니다.
    • systemPath은(는) AEM WKND 프로젝트의 all 모듈에 있는 my-example-bundle 파일의 경로입니다.
    • ${maven.multiModuleProjectDirectory}은(는) 다중 모듈 프로젝트의 루트 디렉터리를 가리키는 Maven 속성입니다.
  • AEM WKND 프로젝트 core 모듈의 core/pom.xml 파일에서 my-example-bundle을(를) 종속성으로 추가합니다.

    code language-xml
    ...
    <!-- My Example Bundle -->
    <dependency>
        <groupId>com.example</groupId>
        <artifactId>my-example-bundle</artifactId>
    </dependency>
    ...
    
  • 다음 명령을 사용하여 AEM WKND 프로젝트를 빌드하고 배포합니다.

    code language-none
    $ mvn clean install -PautoInstallPackage
    
  • 브라우저의 URL http://localhost:4502/bin/sayhello에 액세스하여 SayHello 서블릿이 예상대로 작동하는지 확인하십시오.

  • 위의 변경 사항을 AEM WKND 프로젝트의 저장소에 커밋합니다. 그런 다음 Cloud Manager 파이프라인을 실행하여 RDE 또는 AEM 환경에서 변경 사항을 확인합니다.

    SayHello 서블릿 확인 - 번들 서비스

AEM WKND 프로젝트의 tutorial/install-third-party-bundle 분기에 위와 같은 참조 변경 사항이 있습니다.

주요 학습 key-learnings-bundle

공개 Maven 저장소에서 사용할 수 없는 OSGi 번들은 다음 단계에 따라 AEM 프로젝트에 설치할 수 있습니다.

  • OSGi 번들을 all 모듈의 jcr_root/apps/<PROJECT-NAME>-vendor-packages/container/install 디렉터리에 복사합니다. 이 단계는 AEM 인스턴스에 번들을 패키징하고 배포하는 데 필요합니다.

  • 루트 및 코어 모듈의 pom.xml 파일을 업데이트하여 system 범위 및 systemPath이(가) 번들 파일을 가리키는 종속성으로 OSGi 번들을 추가합니다. 이 단계는 프로젝트를 컴파일하는 데 필요합니다.

AEM 프로젝트에 서드파티 jar 설치

이 예에서 my-example-jar은(는) OSGi 번들이 아니라 Java jar 파일입니다.

공개 Maven 저장소에서 사용할 수 없는 데모 my-example-jar을(를) AEM WKND 프로젝트에 설치 및 사용하겠습니다.

my-example-jar ​은(는) Hello World! 메시지를 반환하는 sayHello() 메서드를 사용하는 MyHelloWorldService 클래스를 포함하는 Java jar 파일입니다.

자세한 내용은 my-example-jar.zip 파일의 README.md 파일을 참조하십시오.

all 모듈에 jar 추가

첫 번째 단계는 AEM WKND 프로젝트의 all 모듈에 my-example-jar을(를) 추가하는 것입니다.

  • my-example-jar.zip 파일을 다운로드하여 추출하십시오.

  • AEM WKND 프로젝트의 all 모듈에서 all/resource/jar 디렉터리 구조를 만듭니다.

  • 추출된 target 디렉터리에서 위의 all/resource/jar 디렉터리로 my-example-jar-1.0-SNAPSHOT.jar 파일을 복사합니다.

    모든 모듈의 타사-jar

jar의 서비스 사용

AEM WKND 프로젝트에서 my-example-jarMyHelloWorldService을(를) 사용해 보겠습니다.

  • AEM WKND 프로젝트의 core 모듈에서 SayHello.java Sling 서블릿 @ core/src/main/java/com/adobe/aem/guides/wknd/core/servlet을(를) 만듭니다.

    code language-java
    package com.adobe.aem.guides.wknd.core.servlet;
    
    import java.io.IOException;
    
    import javax.servlet.Servlet;
    import javax.servlet.ServletException;
    
    import org.apache.sling.api.SlingHttpServletRequest;
    import org.apache.sling.api.SlingHttpServletResponse;
    import org.apache.sling.api.servlets.HttpConstants;
    import org.apache.sling.api.servlets.ServletResolverConstants;
    import org.apache.sling.api.servlets.SlingSafeMethodsServlet;
    import org.osgi.service.component.annotations.Component;
    
    import com.my.example.MyHelloWorldService;
    
    @Component(service = Servlet.class, property = {
            ServletResolverConstants.SLING_SERVLET_PATHS + "=/bin/sayhello",
            ServletResolverConstants.SLING_SERVLET_METHODS + "=" + HttpConstants.METHOD_GET
    })
    public class SayHello extends SlingSafeMethodsServlet {
    
        private static final long serialVersionUID = 1L;
    
        @Override
        protected void doGet(SlingHttpServletRequest request, SlingHttpServletResponse response)
                throws ServletException, IOException {
    
            // Creating an instance of MyHelloWorldService
            MyHelloWorldService myHelloWorldService = new MyHelloWorldService();
    
            // Invoking the MyHelloWorldService's `sayHello` method
            response.getWriter().write("My-Example-JAR service says: " + myHelloWorldService.sayHello());
        }
    }
    
  • AEM WKND 프로젝트의 루트 pom.xml 파일에서 my-example-jar을(를) 종속성으로 추가합니다.

    code language-xml
    ...
    <!-- My Example JAR -->
    <dependency>
        <groupId>com.my.example</groupId>
        <artifactId>my-example-jar</artifactId>
        <version>1.0-SNAPSHOT</version>
        <scope>system</scope>
        <systemPath>${maven.multiModuleProjectDirectory}/all/resource/jar/my-example-jar-1.0-SNAPSHOT.jar</systemPath>
    </dependency>
    ...
    

    여기:

    • system 범위는 공용 Maven 저장소에서 종속성을 조회해서는 안 됨을 나타냅니다.
    • systemPath은(는) AEM WKND 프로젝트의 all 모듈에 있는 my-example-jar 파일의 경로입니다.
    • ${maven.multiModuleProjectDirectory}은(는) 다중 모듈 프로젝트의 루트 디렉터리를 가리키는 Maven 속성입니다.
  • AEM WKND 프로젝트 core 모듈의 core/pom.xml 파일에서 다음 두 가지 사항을 변경합니다.

    • my-example-jar을(를) 종속성으로 추가합니다.

      code language-xml
      ...
      <!-- My Example JAR -->
      <dependency>
          <groupId>com.my.example</groupId>
          <artifactId>my-example-jar</artifactId>
      </dependency>
      ...
      
    • 빌드 중인 OSGi 번들(aem-guides-wknd.core)에 my-example-jar을(를) 포함하도록 bnd-maven-plugin 구성을 업데이트합니다.

      code language-xml
      ...
      <plugin>
          <groupId>biz.aQute.bnd</groupId>
          <artifactId>bnd-maven-plugin</artifactId>
          <executions>
              <execution>
                  <id>bnd-process</id>
                  <goals>
                      <goal>bnd-process</goal>
                  </goals>
                  <configuration>
                      <bnd><![CDATA[
                  Import-Package: javax.annotation;version=0.0.0,*
                  <!-- Include the 3rd party jar as inline resource-->
                  -includeresource: \
                  lib/my-example-jar.jar=my-example-jar-1.0-SNAPSHOT.jar;lib:=true
                          ]]></bnd>
                  </configuration>
              </execution>
          </executions>
      </plugin>
      ...
      
  • 다음 명령을 사용하여 AEM WKND 프로젝트를 빌드하고 배포합니다.

    code language-none
    $ mvn clean install -PautoInstallPackage
    
  • 브라우저의 URL http://localhost:4502/bin/sayhello에 액세스하여 SayHello 서블릿이 예상대로 작동하는지 확인하십시오.

  • 위의 변경 사항을 AEM WKND 프로젝트의 저장소에 커밋합니다. 그런 다음 Cloud Manager 파이프라인을 실행하여 RDE 또는 AEM 환경에서 변경 사항을 확인합니다.

    SayHello 서블릿 확인 - JAR 서비스

AEM WKND 프로젝트의 tutorial/install-third-party-jar 분기에 위와 같은 참조 변경 사항이 있습니다.

Java jar 파일 을(를) 공용 Maven 저장소에서 사용할 수 있지만 OSGi 번들이 아닌 경우 ​에서는 <dependency>system 범위 및 systemPath 요소가 필요하지 않은 경우를 제외하고 위의 단계를 따를 수 있습니다.

주요 학습 key-learnings-jar

OSGi 번들이 아니며 공용 Maven 저장소에서 사용할 수 있거나 사용할 수 없는 Java jar는 다음 단계에 따라 AEM 프로젝트에 설치할 수 있습니다.

  • 작성 중인 OSGi 번들에 Java jar를 인라인 리소스로 포함하도록 코어 모듈의 pom.xml 파일에서 bnd-maven-plugin 구성을 업데이트합니다.

공개 Maven 저장소에서 Java jar를 사용할 수 없는 경우에만 다음 단계가 필요합니다.

  • Java jar를 all 모듈의 resource/jar 디렉터리에 복사합니다.

  • 루트 및 코어 모듈의 pom.xml 파일을 업데이트하여 system 범위 및 jar 파일을 가리키는 systemPath에 종속성으로 Java jar를 추가합니다.

AEM 프로젝트에 서드파티 패키지 설치

주 분기에서 로컬로 빌드된 ACS AEM Commons SNAPSHOT 버전을 설치하겠습니다.

이 작업은 공용 Maven 저장소에서 사용할 수 없는 AEM 패키지를 설치하는 단계를 보여 주기 위해 수행됩니다.

ACS AEM Commons 패키지는 공개 Maven 저장소에서 사용할 수 있습니다. AEM Maven 프로젝트에 ACS AEM Commons 추가를 참조하여 AEM 프로젝트에 추가하십시오.

all 모듈에 패키지 추가

첫 번째 단계는 AEM WKND 프로젝트의 all 모듈에 패키지를 추가하는 것입니다.

  • POM 파일에서 ACS AEM Commons 릴리스 종속성을 주석 처리하거나 제거합니다. 종속성을 확인하려면 AEM Maven 프로젝트에 ACS AEM Commons 추가를 참조하십시오.

  • ACS AEM Commons 저장소master 분기를 로컬 컴퓨터에 복제합니다.

  • 다음 명령을 사용하여 ACS AEM Commons SNAPSHOT 버전을 작성합니다.

    code language-none
    $mvn clean install
    
  • 로컬로 빌드된 패키지는 @ all/target에 있으며 .zip 파일이 두 개 있습니다. 하나는 AEM as a Cloud Service을 위한 것이고 다른 하나는 AEM 6.X를 위한 것입니다.-cloud

  • AEM WKND 프로젝트의 all 모듈에서 all/src/main/content/jcr_root/apps/wknd-vendor-packages/container/install 디렉터리 구조를 만듭니다. /all/src/main/content 디렉터리가 있습니다. jcr_root/apps/wknd-vendor-packages/container/install 디렉터리만 만들면 됩니다.

  • 로컬로 빌드된 패키지(.zip) 파일을 /all/src/main/content/jcr_root/apps/mysite-vendor-packages/container/install 디렉터리에 복사합니다.

  • 다음 명령을 사용하여 AEM WKND 프로젝트를 빌드하고 배포합니다.

    code language-none
    $ mvn clean install -PautoInstallPackage
    
  • 설치된 ACS AEM Commons 패키지 확인:

    • CRX 패키지 관리자 @ http://localhost:4502/crx/packmgr/index.jsp

      ACS AEM Commons 스냅숏 버전 패키지

    • OSGi 콘솔 @ http://localhost:4502/system/console/bundles

      ACS AEM Commons 스냅숏 버전 번들

  • 위의 변경 사항을 AEM WKND 프로젝트의 저장소에 커밋합니다. 그런 다음 Cloud Manager 파이프라인을 실행하여 RDE 또는 AEM 환경에서 변경 사항을 확인합니다.

주요 학습 key-learnings-package

공개 Maven 저장소에서 사용할 수 없는 AEM 패키지는 다음 단계에 따라 AEM 프로젝트에 설치할 수 있습니다.

  • all 모듈의 jcr_root/apps/<PROJECT-NAME>-vendor-packages/container/install 디렉터리에 패키지를 복사합니다. 이 단계는 패키지를 패키징하고 AEM 인스턴스에 배포하는 데 필요합니다.

요약

이 자습서에서는 AEM 프로젝트를 빌드하고 배포할 때 공개 Maven 저장소에서 사용할 수 없는 서드파티 아티팩트(번들, Java jar 및 패키지)를 설치하는 방법을 배웠습니다.

recommendation-more-help
c92bdb17-1e49-4e76-bcdd-89e4f85f45e6