Installare artefatti di terze parti - non disponibile nell’archivio Maven pubblico

Scopri come installare artefatti di terze parti non disponibili nell’archivio Maven pubblico durante la creazione e la distribuzione di un progetto AEM.

I artefatti di terze parti possono essere:

  • Bundle OSGi: un bundle OSGi è un file di archivio Java™ che contiene classi Java, risorse e un manifesto che descrive il bundle e le relative dipendenze.
  • Java jar: file di archivio Java™ contenente classi e risorse Java.
  • Pacchetto: un pacchetto è un file zip contenente il contenuto del repository nel modulo di serializzazione del file system.

Scenario standard

In genere si installa il bundle di terze parti, pacchetto che è disponibile nell'archivio Maven pubblico come dipendenza nel file pom.xml del progetto AEM.

Ad esempio:

  • Componenti core WCM per AEM bundle aggiunto come dipendenza nel file pom.xml del progetto WKND. In questo caso, l'ambito provided viene utilizzato poiché il bundle dei Componenti core WCM dell'AEM è fornito dal runtime dell'AEM. Se il bundle non viene fornito dal runtime AEM, viene utilizzato l'ambito compile che è quello predefinito.

  • Pacchetto pacchetto condiviso WKND aggiunto come dipendenza nel file pom.xml del progetto WKND.

Scenario raro

Talvolta, durante la creazione e la distribuzione di un progetto AEM, potrebbe essere necessario installare un pacchetto di terze parti, un file jar o un pacchetto non disponibile nell'archivio centrale Maven o nell'archivio pubblico Adobe.

I motivi potrebbero essere:

  • Il bundle o il pacchetto è fornito da un team interno o da un fornitore di terze parti e non è disponibile nell'archivio Maven pubblico.

  • Il file Java™ jar non è un bundle OSGi e potrebbe non essere disponibile nell'archivio Maven pubblico.

  • È necessaria una funzione non ancora rilasciata nell’ultima versione del pacchetto di terze parti disponibile nell’archivio Maven pubblico. Si è deciso di installare la versione Release o SNAPSHOT creata localmente.

Prerequisiti

Per seguire questa esercitazione, è necessario:

Configurazione

  • Configurare l’ambiente di sviluppo locale AEM 6.X o AEM as a Cloud Service (AEMCS) o l’ambiente RDE.

  • Clona e implementa il progetto WKND dell’AEM.

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

    Verifica che il rendering delle pagine del sito WKND sia corretto.

Installare un bundle di terze parti in un progetto AEM install-third-party-bundle

Installiamo e utilizziamo un OSGi demo my-example-bundle che non è disponibile nell'archivio Maven pubblico per il progetto WKND dell'AEM.

Il my-example-bundle esporta il servizio OSGi HelloWorldService. Il relativo metodo sayHello() restituisce il messaggio Hello Earth!.

Per ulteriori dettagli, fare riferimento al file README.md nel file my-example-bundle.zip.

Aggiungi il bundle al modulo all

Il primo passaggio consiste nell'aggiungere my-example-bundle al modulo all del progetto WKND AEM.

  • Scarica ed estrai il file my-example-bundle.zip.

  • Nel modulo all del progetto WKND AEM, creare la struttura di directory all/src/main/content/jcr_root/apps/wknd-vendor-packages/container/install. La directory /all/src/main/content esiste. È sufficiente creare le directory jcr_root/apps/wknd-vendor-packages/container/install.

  • Copiare il file my-example-bundle-1.0-SNAPSHOT.jar dalla directory target estratta nella directory all/src/main/content/jcr_root/apps/wknd-vendor-packages/container/install precedente.

    bundle di terze parti in tutti i moduli

Utilizza il servizio dal bundle

Utilizziamo il servizio OSGi HelloWorldService di my-example-bundle nel progetto WKND dell'AEM.

  • Nel modulo core del progetto WKND AEM, crea il servlet Sling SayHello.java @ 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());
            }
    }
    
  • Nel file pom.xml principale del progetto WKND AEM, aggiungi my-example-bundle come dipendenza.

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

    Qui:

    • L'ambito system indica che la dipendenza non deve essere cercata nell'archivio Maven pubblico.
    • systemPath è il percorso del file my-example-bundle nel modulo all del progetto WKND AEM.
    • ${maven.multiModuleProjectDirectory} è una proprietà Maven che punta alla directory principale del progetto con più moduli.
  • Nel file core/pom.xml del modulo core del progetto WKND dell'AEM, aggiungi my-example-bundle come dipendenza.

    code language-xml
    ...
    <!-- My Example Bundle -->
    <dependency>
        <groupId>com.example</groupId>
        <artifactId>my-example-bundle</artifactId>
    </dependency>
    ...
    
  • Genera e implementa il progetto WKND dell’AEM utilizzando il seguente comando:

    code language-none
    $ mvn clean install -PautoInstallPackage
    
  • Verificare che il servlet SayHello funzioni come previsto accedendo all'URL http://localhost:4502/bin/sayhello nel browser.

  • Apporta le modifiche precedenti all’archivio del progetto WKND dell’AEM. Verifica quindi le modifiche nell’ambiente RDE o AEM eseguendo la pipeline Cloud Manager.

    Verifica il servlet SayHello - Bundle Service

Il ramo tutorial/install-3rd-party-bundle del progetto WKND dell'AEM presenta le modifiche precedenti come riferimento.

Apprendimenti chiave key-learnings-bundle

I bundle OSGi che non sono disponibili nell’archivio Maven pubblico possono essere installati in un progetto AEM seguendo questi passaggi:

  • Copiare il bundle OSGi nella directory jcr_root/apps/<PROJECT-NAME>-vendor-packages/container/install del modulo all. Questo passaggio è necessario per creare un pacchetto e distribuire il bundle nell’istanza AEM.

  • Aggiorna i file pom.xml del modulo radice e core per aggiungere il bundle OSGi come dipendenza con l'ambito system e systemPath che puntano al file del bundle. Questo passaggio è necessario per compilare il progetto.

Installare un file jar di terze parti in un progetto AEM

In questo esempio, my-example-jar non è un bundle OSGi, ma un file Java JAR.

Installiamo e utilizziamo una demo my-example-jar che non è disponibile nell'archivio Maven pubblico per il progetto WKND dell'AEM.

my-example-jar è un file Java jar che contiene una classe MyHelloWorldService con un metodo sayHello() che restituisce il messaggio Hello World!.

Per ulteriori dettagli, fare riferimento al file README.md nel file my-example-jar.zip.

Aggiungi il file jar al modulo all

Il primo passaggio consiste nell'aggiungere my-example-jar al modulo all del progetto WKND AEM.

  • Scarica ed estrai il file my-example-jar.zip.

  • Nel modulo all del progetto WKND AEM, creare la struttura di directory all/resource/jar.

  • Copiare il file my-example-jar-1.0-SNAPSHOT.jar dalla directory target estratta nella directory all/resource/jar precedente.

    jar di terze parti in tutti i moduli

Utilizza il servizio dal file jar

Utilizziamo MyHelloWorldService da my-example-jar nel progetto WKND dell'AEM.

  • Nel modulo core del progetto WKND AEM, crea il servlet Sling SayHello.java @ 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());
        }
    }
    
  • Nel file pom.xml principale del progetto WKND AEM, aggiungi my-example-jar come dipendenza.

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

    Qui:

    • L'ambito system indica che la dipendenza non deve essere cercata nell'archivio Maven pubblico.
    • systemPath è il percorso del file my-example-jar nel modulo all del progetto WKND AEM.
    • ${maven.multiModuleProjectDirectory} è una proprietà Maven che punta alla directory principale del progetto con più moduli.
  • Nel file core/pom.xml del modulo core del progetto WKND dell'AEM, apporta due modifiche:

    • Aggiungi my-example-jar come dipendenza.

      code language-xml
      ...
      <!-- My Example JAR -->
      <dependency>
          <groupId>com.my.example</groupId>
          <artifactId>my-example-jar</artifactId>
      </dependency>
      ...
      
    • Aggiorna la configurazione bnd-maven-plugin per includere my-example-jar nel bundle OSGi (aem-guides-wknd.core) in fase di generazione.

      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>
      ...
      
  • Genera e implementa il progetto WKND dell’AEM utilizzando il seguente comando:

    code language-none
    $ mvn clean install -PautoInstallPackage
    
  • Verificare che il servlet SayHello funzioni come previsto accedendo all'URL http://localhost:4502/bin/sayhello nel browser.

  • Apporta le modifiche precedenti all’archivio del progetto WKND dell’AEM. Verifica quindi le modifiche nell’ambiente RDE o AEM eseguendo la pipeline Cloud Manager.

    Verifica il servlet SayHello - Servizio JAR

Il ramo tutorial/install-3rd-party-jar del progetto WKND dell'AEM presenta le modifiche precedenti come riferimento.

Negli scenari in cui il file Java jar è disponibile nell'archivio Maven pubblico ma NON è un bundle OSGi, puoi seguire i passaggi precedenti eccetto l'ambito system di <dependency> e gli elementi systemPath non sono necessari.

Apprendimenti chiave key-learnings-jar

I file JAR Java che non sono bundle OSGi e che possono essere o meno disponibili nell’archivio Maven pubblico possono essere installati in un progetto AEM seguendo questi passaggi:

  • Aggiorna la configurazione bnd-maven-plugin nel file pom.xml del modulo core per includere il file jar Java come risorsa in linea nel bundle OSGi in fase di generazione.

I passaggi seguenti sono necessari solo se Java jar non è disponibile nell’archivio Maven pubblico:

  • Copiare il file jar Java nella directory resource/jar del modulo all.

  • Aggiorna i file pom.xml del modulo radice e core per aggiungere il file Java jar come dipendenza con l'ambito system e systemPath che punta al file jar.

Installare un pacchetto di terze parti in un progetto AEM

Installiamo la versione ACS AEM Commons SNAPSHOT generata localmente dal ramo principale.

Viene eseguito solo per illustrare i passaggi necessari per installare un pacchetto AEM non disponibile nell’archivio Maven pubblico.

Il pacchetto ACS AEM Commons è disponibile nell’archivio Maven pubblico. Fai riferimento a Aggiungi ACS AEM Commons al tuo progetto AEM Maven per aggiungerlo al tuo progetto AEM.

Aggiungi il pacchetto al modulo all

Il primo passaggio consiste nell'aggiungere il pacchetto al modulo all del progetto WKND dell'AEM.

  • Commenta o rimuovi la dipendenza di rilascio ACS AEM Commons dal file POM. Fai riferimento a Aggiungi ACS AEM Commons al tuo progetto Maven AEM per identificare la dipendenza.

  • Clona il ramo master dell'archivio ACS AEM Commons nel computer locale.

  • Crea la versione SNAPSHOT di ACS AEM Commons utilizzando il seguente comando:

    code language-none
    $mvn clean install
    
  • Il pacchetto generato localmente si trova in all/target, sono presenti due file .zip, uno che termina con -cloud è destinato ad AEM as a Cloud Service e l'altro è per AEM 6.X.

  • Nel modulo all del progetto WKND AEM, creare la struttura di directory all/src/main/content/jcr_root/apps/wknd-vendor-packages/container/install. La directory /all/src/main/content esiste. È sufficiente creare le directory jcr_root/apps/wknd-vendor-packages/container/install.

  • Copiare il file del pacchetto creato localmente (zip) nella directory /all/src/main/content/jcr_root/apps/mysite-vendor-packages/container/install.

  • Genera e implementa il progetto WKND dell’AEM utilizzando il seguente comando:

    code language-none
    $ mvn clean install -PautoInstallPackage
    
  • Verifica il pacchetto ACS AEM Commons installato:

    • Gestione pacchetti CRX alle http://localhost:4502/crx/packmgr/index.jsp

      Pacchetto versione SNAPSHOT AEM Commons ACS

    • La console OSGi alle http://localhost:4502/system/console/bundles

      Pacchetto versione SNAPSHOT AEM Commons ACS

  • Apporta le modifiche precedenti all’archivio del progetto WKND dell’AEM. Verifica quindi le modifiche nell’ambiente RDE o AEM eseguendo la pipeline Cloud Manager.

Apprendimenti chiave key-learnings-package

I pacchetti AEM non disponibili nell’archivio Maven pubblico possono essere installati in un progetto AEM seguendo la procedura riportata di seguito:

  • Copiare il pacchetto nella directory jcr_root/apps/<PROJECT-NAME>-vendor-packages/container/install del modulo all. Questo passaggio è necessario per creare un pacchetto e distribuirlo all’istanza AEM.

In questa esercitazione hai imparato a installare artefatti di terze parti (bundle, Java Jar e pacchetto) che non sono disponibili nell’archivio Maven pubblico durante la creazione e la distribuzione di un progetto AEM.

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