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 escopoprovided
é 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 escopocompile
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:
-
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 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órioall/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óriosjcr_root/apps/wknd-vendor-packages/container/install
. -
Copie o arquivo
my-example-bundle-1.0-SNAPSHOT.jar
do diretóriotarget
extraído para o diretórioall/src/main/content/jcr_root/apps/wknd-vendor-packages/container/install
acima.
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 SlingSayHello.java
emcore/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 omy-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 arquivomy-example-bundle
no móduloall
do projeto WKND 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
core/pom.xml
do módulocore
do projeto WKND AEM, adicione omy-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 URLhttp://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.
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óduloall
. 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 escoposystem
esystemPath
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órioall/resource/jar
. -
Copie o arquivo
my-example-jar-1.0-SNAPSHOT.jar
do diretóriotarget
extraído para o diretórioall/resource/jar
acima.
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 SlingSayHello.java
emcore/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 omy-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 arquivomy-example-jar
no móduloall
do projeto WKND 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
core/pom.xml
do módulocore
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 incluirmy-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 URLhttp://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.
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 arquivopom.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óduloall
. -
Atualize os arquivos
pom.xml
da raiz e do módulo principal para adicionar o jar Java como uma dependência com o escoposystem
esystemPath
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órioall/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ó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 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óduloall
. 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.