Instalar artefatos de terceiros - não disponível no repositório Maven público

Saiba como instalar artefatos de terceiros que não estão disponíveis no repositório público Maven ao compilar e implantar um projeto AEM.

Os artefatos de terceiros podem ser:

  • Pacote OSGi: um pacote OSGi é um arquivo morto Java™ que contém classes, recursos e um manifesto Java que descreve o pacote e suas dependências.
  • Java jar: um arquivo de repositório Java™ que contém classes e recursos Java.
  • Pacote: um pacote é um arquivo zip que contém o conteúdo do repositório no formato de serialização do sistema de arquivos.

Cenário padrão

Normalmente, você instalaria o pacote de terceiros, pacote esse está disponível no repositório Maven público como uma dependência no arquivo pom.xml do seu projeto AEM.

Por exemplo:

  • Componentes Principais de WCM do AEM pacote adicionado como uma dependência no arquivo WKND do projeto pom.xml. Aqui, o escopo provided é usado como o pacote de Componentes principais WCM do AEM fornecido pelo tempo de execução do AEM. Se o pacote não for fornecido pelo tempo de execução do AEM, você usaria o escopo compile e esse é o escopo padrão.

  • WKND Compartilhado pacote é adicionado como uma dependência no arquivo 🔗 pom.xml do projeto WKND.

Cenário raro

Ocasionalmente, ao criar e implantar um projeto AEM, talvez seja necessário instalar um pacote ou jar de terceiros ou o pacote que não esteja disponível no Repositório Central Maven ou no Repositório Público Adobe.

Os motivos podem ser:

  • O pacote é fornecido por uma equipe interna ou fornecedor terceirizado e não está disponível no repositório Maven público.

  • O arquivo jar do Java™ não é um pacote OSGi e pode ou não estar disponível no repositório Maven público.

  • Você precisa de um recurso que ainda não foi lançado na versão mais recente do pacote de terceiros disponível no repositório Maven público. Você decidiu instalar a versão RELEASE ou SNAPSHOT criada localmente.

Pré-requisitos

Para seguir este tutorial, você precisa:

Configuração

  • Configurar o ambiente de desenvolvimento local do AEM 6.X ou AEM as a Cloud Service (AEMCS) ou RDE.

  • Clonar e implantar o projeto WKND AEM.

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

    Verifique se as páginas do site WKND são renderizadas corretamente.

Instalar um pacote de terceiros em um projeto AEM install-third-party-bundle

Vamos instalar e usar um OSGi de demonstração my-example-bundle que não está disponível no repositório Maven público para o projeto WKND do AEM.

O my-example-bundle exporta o serviço OSGi HelloWorldService, seu método sayHello() retorna a mensagem Hello Earth!.

Para obter mais detalhes, consulte o arquivo README.md no arquivo my-example-bundle.zip.

Adicionar o pacote ao módulo all

A primeira etapa é adicionar o my-example-bundle ao módulo all do projeto WKND AEM.

  • Baixe e extraia o arquivo my-example-bundle.zip.

  • No módulo all do projeto WKND AEM, crie a estrutura de diretório all/src/main/content/jcr_root/apps/wknd-vendor-packages/container/install. O diretório /all/src/main/content existe, você só precisa criar os diretórios jcr_root/apps/wknd-vendor-packages/container/install.

  • Copie o arquivo my-example-bundle-1.0-SNAPSHOT.jar do diretório target extraído para o diretório all/src/main/content/jcr_root/apps/wknd-vendor-packages/container/install acima.

    pacote de terceiros em todos os módulos

Usar o serviço do pacote

Vamos usar o serviço OSGi HelloWorldService do my-example-bundle no projeto AEM WKND.

  • No módulo core do projeto WKND AEM, crie o servlet Sling SayHello.java em 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());
            }
    }
    
  • No arquivo pom.xml raiz do projeto WKND AEM, adicione o my-example-bundle como uma dependência.

    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>
    ...
    

    Aqui:

    • O escopo system indica que a dependência não deve ser pesquisada no repositório Maven público.
    • O systemPath é o caminho para o arquivo my-example-bundle no módulo all do projeto WKND AEM.
    • O ${maven.multiModuleProjectDirectory} é uma propriedade Maven que aponta para o diretório raiz do projeto de vários módulos.
  • No arquivo core/pom.xml do módulo core do projeto WKND AEM, adicione o my-example-bundle como uma dependência.

    code language-xml
    ...
    <!-- My Example Bundle -->
    <dependency>
        <groupId>com.example</groupId>
        <artifactId>my-example-bundle</artifactId>
    </dependency>
    ...
    
  • Crie e implante o projeto WKND do AEM usando o seguinte comando:

    code language-none
    $ mvn clean install -PautoInstallPackage
    
  • Verifique se o servlet SayHello funciona conforme esperado acessando a URL http://localhost:4502/bin/sayhello no navegador.

  • Confirme as alterações acima no repositório do projeto WKND AEM. Em seguida, verifique as alterações no ambiente RDE ou AEM executando o pipeline do Cloud Manager.

    Verificar o servlet SayHello - Serviço de Pacote

A ramificação tutorial/install-3rd-party-bundle do projeto AEM WKND tem as alterações acima para sua referência.

Principais aprendizados key-learnings-bundle

Os pacotes OSGi que não estão disponíveis no repositório Maven público podem ser instalados em um projeto AEM seguindo estas etapas:

  • Copie o pacote OSGi para o diretório jcr_root/apps/<PROJECT-NAME>-vendor-packages/container/install do módulo all. Essa etapa é necessária para empacotar e implantar o pacote na instância do AEM.

  • Atualize os arquivos pom.xml dos módulos raiz e principal para adicionar o pacote OSGi como uma dependência com o escopo system e systemPath apontando para o arquivo de pacote. Essa etapa é necessária para compilar o projeto.

Instalar um jar de terceiros em um projeto AEM

Neste exemplo, o my-example-jar não é um pacote OSGi, mas um arquivo jar Java.

Vamos instalar e usar uma demonstração my-example-jar de que não está disponível no repositório Maven público para o projeto WKND do AEM.

O my-example-jar é um arquivo jar Java que contém uma classe MyHelloWorldService com um método sayHello() que retorna a mensagem Hello World!.

Para obter mais detalhes, consulte o arquivo README.md no arquivo my-example-jar.zip.

Adicionar o jar ao módulo all

A primeira etapa é adicionar o my-example-jar ao módulo all do projeto WKND AEM.

  • Baixe e extraia o arquivo my-example-jar.zip.

  • No módulo all do projeto WKND AEM, crie a estrutura de diretório all/resource/jar.

  • Copie o arquivo my-example-jar-1.0-SNAPSHOT.jar do diretório target extraído para o diretório all/resource/jar acima.

    jar de terceiros em todos os módulos

Usar o serviço do jar

Vamos usar o MyHelloWorldService do my-example-jar no projeto WKND do AEM.

  • No módulo core do projeto WKND AEM, crie o servlet Sling SayHello.java em 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());
        }
    }
    
  • No arquivo pom.xml raiz do projeto WKND AEM, adicione o my-example-jar como uma dependência.

    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>
    ...
    

    Aqui:

    • O escopo system indica que a dependência não deve ser pesquisada no repositório Maven público.
    • O systemPath é o caminho para o arquivo my-example-jar no módulo all do projeto WKND AEM.
    • O ${maven.multiModuleProjectDirectory} é uma propriedade Maven que aponta para o diretório raiz do projeto de vários módulos.
  • No arquivo core/pom.xml do módulo core do projeto WKND AEM, faça duas alterações:

    • Adicione o my-example-jar como uma dependência.

      code language-xml
      ...
      <!-- My Example JAR -->
      <dependency>
          <groupId>com.my.example</groupId>
          <artifactId>my-example-jar</artifactId>
      </dependency>
      ...
      
    • Atualize a configuração bnd-maven-plugin para incluir my-example-jar no pacote OSGi (aem-guides-wknd.core) que está sendo compilado.

      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>
      ...
      
  • Crie e implante o projeto WKND do AEM usando o seguinte comando:

    code language-none
    $ mvn clean install -PautoInstallPackage
    
  • Verifique se o servlet SayHello funciona conforme esperado acessando a URL http://localhost:4502/bin/sayhello no navegador.

  • Confirme as alterações acima no repositório do projeto WKND AEM. Em seguida, verifique as alterações no ambiente RDE ou AEM executando o pipeline do Cloud Manager.

    Verificar o servlet SayHello - Serviço JAR

A ramificação tutorial/install-3rd-party-jar do projeto AEM WKND tem as alterações acima para sua referência.

Em cenários em que o arquivo jar do Java está disponível no repositório Maven público, mas NÃO é um pacote OSGi, você pode seguir as etapas acima, exceto o escopo system de <dependency>, e os elementos systemPath não são obrigatórios.

Principais aprendizados key-learnings-jar

Os jars do Java que não são pacotes OSGi e podem ou não estar disponíveis no repositório Maven público podem ser instalados em um projeto AEM seguindo estas etapas:

  • Atualize a configuração bnd-maven-plugin no arquivo pom.xml do módulo principal para incluir o Java jar como um recurso em linha no pacote OSGi que está sendo criado.

As seguintes etapas só serão necessárias se o jar do Java não estiver disponível no repositório Maven público:

  • Copie o jar do Java para o diretório resource/jar do módulo all.

  • Atualize os arquivos pom.xml da raiz e do módulo principal para adicionar o jar Java como uma dependência com o escopo system e systemPath apontando para o arquivo jar.

Instalar um pacote de terceiros em um projeto AEM

Vamos instalar a versão ACS AEM Commons SNAPSHOT criada localmente a partir da ramificação principal.

Isso é feito exclusivamente para demonstrar as etapas de instalação de um pacote de AEM que não está disponível no repositório Maven público.

O pacote ACS AEM Commons está disponível no repositório Maven público. Consulte o Adicionar ACS AEM Commons ao seu projeto AEM Maven para adicioná-lo ao seu projeto AEM.

Adicionar o pacote ao módulo all

A primeira etapa é adicionar o pacote ao módulo all do projeto WKND AEM.

  • Comente ou remova a dependência de liberação ACS AEM Commons do arquivo POM. Consulte o Adicionar ACS AEM Commons ao seu projeto AEM Maven para identificar a dependência.

  • Clonar a ramificação master do repositório ACS AEM Commons no computador local.

  • Crie a versão ACS AEM Commons SNAPSHOT usando o seguinte comando:

    code language-none
    $mvn clean install
    
  • O pacote criado localmente está localizado em all/target, há dois arquivos .zip, um que termina com -cloud destina-se ao AEM as a Cloud Service e o outro é para AEM 6.X.

  • No módulo all do projeto WKND AEM, crie a estrutura de diretório all/src/main/content/jcr_root/apps/wknd-vendor-packages/container/install. O diretório /all/src/main/content existe, você só precisa criar os diretórios jcr_root/apps/wknd-vendor-packages/container/install.

  • Copie o arquivo de pacote (.zip) criado localmente no diretório /all/src/main/content/jcr_root/apps/mysite-vendor-packages/container/install.

  • Crie e implante o projeto WKND do AEM usando o seguinte comando:

    code language-none
    $ mvn clean install -PautoInstallPackage
    
  • Verifique o pacote ACS AEM Commons instalado:

    • Gerenciador de Pacotes do CRX @ http://localhost:4502/crx/packmgr/index.jsp

      Pacote de versão de INSTANTÂNEO ACS AEM Commons

    • O console OSGi @ http://localhost:4502/system/console/bundles

      Pacote de versão de INSTANTÂNEO ACS AEM Commons

  • Confirme as alterações acima no repositório do projeto WKND AEM. Em seguida, verifique as alterações no ambiente RDE ou AEM executando o pipeline do Cloud Manager.

Principais aprendizados key-learnings-package

Os pacotes de AEM que não estão disponíveis no repositório Maven público podem ser instalados em um projeto AEM seguindo estas etapas:

  • Copie o pacote para o diretório jcr_root/apps/<PROJECT-NAME>-vendor-packages/container/install do módulo all. Essa etapa é necessária para empacotar e implantar o pacote na instância do AEM.

Resumo

Neste tutorial, você aprendeu a instalar artefatos de terceiros (pacote, jar Java e pacote) que não estão disponíveis no repositório Maven público ao criar e implantar um projeto AEM.

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