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 Maven público ao compilar e implantar um projeto do 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 do AEM.
Por exemplo:
-
Os Componentes Principais do AEM WCM pacote foram adicionados como uma dependência no arquivo do
pom.xmlprojeto WKND. Aqui, o escopoprovidedé usado, pois o conjunto 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 escopocompilee esse é o escopo padrão. -
WKND Compartilhado pacote é adicionado como uma dependência no arquivo do
pom.xmlprojeto WKND.
Cenário raro
Ocasionalmente, ao criar e implantar um projeto do AEM, talvez seja necessário instalar um pacote de terceiros ou jar ou 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:
-
Instalação do ambiente de desenvolvimento local do AEM ou do Ambiente de Desenvolvimento Rápido(RDE).
-
O projeto WKND do AEM para adicionar o pacote ou jar ou o pacote de terceiros e verificar as alterações.
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 do AEM.
code language-none $ git clone git@github.com:adobe/aem-guides-wknd.git $ cd aem-guides-wknd $ mvn clean install -PautoInstallPackageVerifique se as páginas do site WKND são renderizadas corretamente.
Instalar um pacote de terceiros em um projeto do 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 my-example-bundle ao módulo all do projeto WKND do AEM.
-
Baixe e extraia o arquivo my-example-bundle.zip.
-
No módulo
alldo projeto WKND do AEM, crie a estrutura de diretórioall/src/main/content/jcr_root/apps/wknd-vendor-packages/container/install. O diretório/all/src/main/contentexiste, você só precisa criar os diretóriosjcr_root/apps/wknd-vendor-packages/container/install. -
Copie o arquivo
my-example-bundle-1.0-SNAPSHOT.jardo diretóriotargetextraído para o diretórioall/src/main/content/jcr_root/apps/wknd-vendor-packages/container/installacima.
Usar o serviço do pacote
Vamos usar o serviço OSGi HelloWorldService do my-example-bundle no projeto WKND do AEM.
-
No módulo
coredo projeto WKND do AEM, crie o servlet SlingSayHello.javaàscore/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.xmlraiz do projeto WKND do AEM, adicione omy-example-bundlecomo 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
systemindica que a dependência não deve ser pesquisada no repositório Maven público. - O
systemPathé o caminho para o arquivomy-example-bundleno móduloalldo projeto WKND do AEM. - O
${maven.multiModuleProjectDirectory}é uma propriedade Maven que aponta para o diretório raiz do projeto de vários módulos.
- O escopo
-
No arquivo
coredo módulocore/pom.xmldo projeto WKND do AEM, adicionemy-example-bundlecomo 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
SayHellofunciona conforme esperado acessando a URLhttp://localhost:4502/bin/sayhellono navegador. -
Confirme as alterações acima no repositório do projeto WKND do AEM. Em seguida, verifique as alterações no ambiente RDE ou AEM executando o pipeline do Cloud Manager.
A ramificação tutorial/install-3rd-party-bundle do projeto WKND do AEM 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 do AEM seguindo estas etapas:
-
Copie o pacote OSGi para o diretório
alldo módulojcr_root/apps/<PROJECT-NAME>-vendor-packages/container/install. Essa etapa é necessária para empacotar e implantar o pacote na instância do AEM. -
Atualize os arquivos
pom.xmldos módulos raiz e principal para adicionar o pacote OSGi como uma dependência com o escoposystemesystemPathapontando para o arquivo de pacote. Essa etapa é necessária para compilar o projeto.
Instalar um jar de terceiros em um projeto do 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 my-example-jar ao módulo all do projeto WKND do AEM.
-
Baixe e extraia o arquivo my-example-jar.zip.
-
No módulo
alldo projeto WKND do AEM, crie a estrutura de diretórioall/resource/jar. -
Copie o arquivo
my-example-jar-1.0-SNAPSHOT.jardo diretóriotargetextraído para o diretórioall/resource/jaracima.
Usar o serviço do jar
Vamos usar o MyHelloWorldService do my-example-jar no projeto WKND do AEM.
-
No módulo
coredo projeto WKND do AEM, crie o servlet SlingSayHello.javaàscore/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.xmlraiz do projeto WKND do AEM, adicione omy-example-jarcomo 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
systemindica que a dependência não deve ser pesquisada no repositório Maven público. - O
systemPathé o caminho para o arquivomy-example-jarno móduloalldo projeto WKND do AEM. - O
${maven.multiModuleProjectDirectory}é uma propriedade Maven que aponta para o diretório raiz do projeto de vários módulos.
- O escopo
-
No arquivo
coredo módulocore/pom.xmldo projeto WKND do AEM, faça duas alterações:-
Adicione o
my-example-jarcomo 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-pluginpara incluirmy-example-jarno 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
SayHellofunciona conforme esperado acessando a URLhttp://localhost:4502/bin/sayhellono navegador. -
Confirme as alterações acima no repositório do projeto WKND do AEM. Em seguida, verifique as alterações no ambiente RDE ou AEM executando o pipeline do Cloud Manager.
A ramificação tutorial/install-3rd-party-jar do projeto WKND do AEM 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 <dependency> de system, 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-pluginno arquivopom.xmldo 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
alldo móduloresource/jar. -
Atualize os arquivos
pom.xmlda raiz e do módulo principal para adicionar o jar Java como uma dependência com o escoposystemesystemPathapontando para o arquivo jar.
Instalar um pacote de terceiros em um projeto do AEM
Vamos instalar a versão ACS AEM Commons SNAPSHOT criada localmente a partir da ramificação principal.
É feito apenas para demonstrar as etapas para instalar um pacote do 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 do AEM.
-
Comente ou remova a dependência da versã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
masterdo repositório do 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é destinado ao AEM as a Cloud Service e o outro é para o AEM 6.X. -
No módulo
alldo projeto WKND do AEM, crie a estrutura de diretórioall/src/main/content/jcr_root/apps/wknd-vendor-packages/container/install. O diretório/all/src/main/contentexiste, você só precisa criar os diretóriosjcr_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
-
O console OSGi @
http://localhost:4502/system/console/bundles
-
-
Confirme as alterações acima no repositório do projeto WKND do 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 do AEM que não estão disponíveis no repositório Maven público podem ser instalados em um projeto do AEM seguindo estas etapas:
- Copie o pacote para o diretório
alldo módulojcr_root/apps/<PROJECT-NAME>-vendor-packages/container/install. 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 do AEM.