Artefacten van derden installeren - niet beschikbaar in de openbare Maven-opslagplaats

Leer hoe te om derdeartefacten te installeren die niet beschikbaar in de openbare Gemaakte bewaarplaats wanneer het bouwen van en het opstellen van een AEM project zijn.

De derdeartefacten kunnen zijn:

  • OSGi bundel: Een bundel OSGi is een Java™ archiefdossier dat de klassen, de middelen van Java bevat, en manifest die de bundel en zijn gebiedsdelen beschrijft.
  • Java jar: Een Java™ archiefdossier dat de klassen en de middelen van Java bevat.
  • Pakket: Een pakket is een zip dossier dat bewaarplaats inhoud in dossier-systeem rangschikkingsvorm bevat.

Standaardscenario

Typisch zou u de derdebundel installeren, pakket dat ** in de openbare GeMaven bewaarplaats als gebiedsdeel in het 2} dossier van uw AEM project {beschikbaar is.pom.xml

Bijvoorbeeld:

  • AEM de Componenten van de Kern WCMbundel wordt toegevoegd als gebiedsdeel in het WKND- projectpom.xml dossier. Hier wordt het bereik provided gebruikt als de AEM WCM Core Components-bundel wordt geleverd door de AEM runtime. Als de bundel niet door AEM runtime wordt verstrekt, zou u het compile werkingsgebied gebruiken en het is het standaardwerkingsgebied.

  • Gedeelde WKNDpakket wordt toegevoegd als gebiedsdeel in het WKND- projectpom.xml dossier.

Zeldzame scenario

Af en toe, wanneer het bouwen van en het opstellen van een AEM project, kunt u een derdebundel of jar of pakket moeten installeren die niet beschikbaar in Gemaakt Centrale Bewaarplaatsof Openbare Bewaarplaats van de Adobeis.

De redenen hiervoor zouden kunnen zijn:

  • De bundel of het pakket wordt verstrekt door een intern team of een derdeverkoper en is niet beschikbaar in de openbare GeMaven bewaarplaats.

  • Het Java™ jar dossier is geen bundel OSGi en kan of niet beschikbaar in de openbare GeMaven bewaarplaats zijn.

  • U hebt een functie nodig die nog niet wordt vrijgegeven in de meest recente versie van het pakket van derden dat beschikbaar is in de openbare Maven-opslagruimte. U hebt ervoor gekozen de lokaal gebouwde versie van RELEASE of SNAPSHOT te installeren.

Vereisten

Voor het volgen van deze zelfstudie hebt u het volgende nodig:

Instellen

  • Stel de lokale ontwikkelomgeving of RDE-omgeving van AEM 6.X of AEM as a Cloud Service (AEMCS) in.

  • Klonen en implementeren van het AEM WKND-project.

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

    Controleer of de WKND-sitepagina's correct worden weergegeven.

Een bundel van derden installeren in een AEM-project install-third-party-bundle

Laat installeren en gebruiken een demo OSGi my-example-bundledat niet beschikbaar in de openbare GeMaven bewaarplaats aan het AEM WKND project is.

De my-example-bundle voert HelloWorldService dienst OSGi uit, zijn sayHello() methode keert Hello Earth! bericht terug.

Voor meer details, verwijs naar het README.md- dossier in het {🔗 dossier 0} my-example-bundle.zip.

Voeg de bundel toe aan de module all

De eerste stap bestaat uit het toevoegen van my-example-bundle aan de module all van het AEM WKND-project.

  • Download en haal het {🔗 dossier 0} my-example-bundle.zip.

  • Maak in de module all van AEM WKND-project de mappenstructuur van all/src/main/content/jcr_root/apps/wknd-vendor-packages/container/install . De map /all/src/main/content bestaat, u hoeft alleen de mappen jcr_root/apps/wknd-vendor-packages/container/install te maken.

  • Kopieer het my-example-bundle-1.0-SNAPSHOT.jar -bestand uit de uitgepakte target -map naar de bovenstaande all/src/main/content/jcr_root/apps/wknd-vendor-packages/container/install -map.

    derde-partij-bundel in alle module

De service uit de bundel gebruiken

Laten we de HelloWorldService OSGi-service van my-example-bundle in het AEM WKND-project gebruiken.

  • Maak in de module core van AEM WKND-project de SayHello.java Sling servlet @ 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());
            }
    }
    
  • Voeg in het hoofdbestand pom.xml van het AEM WKND-project de my-example-bundle toe als een afhankelijkheid.

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

    Hier:

    • Het bereik system geeft aan dat de afhankelijkheid niet moet worden opgezocht in de openbare Maven-opslagruimte.
    • systemPath is het pad naar het my-example-bundle -bestand in de module all van het AEM WKND-project.
    • ${maven.multiModuleProjectDirectory} is een Maven bezit dat aan de wortelfolder van het multi-moduleproject richt.
  • Voeg in het bestand core/pom.xml van de module core van AEM WKND-project de my-example-bundle als een afhankelijkheid toe.

    code language-xml
    ...
    <!-- My Example Bundle -->
    <dependency>
        <groupId>com.example</groupId>
        <artifactId>my-example-bundle</artifactId>
    </dependency>
    ...
    
  • Bouw en stel het AEM WKND- project op gebruikend het volgende bevel:

    code language-none
    $ mvn clean install -PautoInstallPackage
    
  • Controleer of de SayHello servlet naar behoren werkt door de URL http://localhost:4502/bin/sayhello in de browser te openen.

  • Leg bovenstaande wijzigingen vast in de opslagplaats van het AEM WKND-project. Dan verifieer de veranderingen in RDE of AEM milieu door de pijpleiding van Cloud Manager in werking te stellen.

    verifieer de HaveHello servlet - de Dienst van de Bundel

De leerprogramma/installatie-3de-partij-bundeltak van het AEM WKND project heeft de bovengenoemde veranderingen voor uw verwijzing.

Belangrijke lessen key-learnings-bundle

De bundels OSGi die niet beschikbaar in de openbare Geweven bewaarplaats zijn kunnen in een AEM project worden geïnstalleerd door deze stappen te volgen:

  • Kopieer de OSGi-bundel naar de map jcr_root/apps/<PROJECT-NAME>-vendor-packages/container/install van de module all . Deze stap is noodzakelijk om de bundel in een pakket te plaatsen en in te voeren aan de AEM instantie.

  • Werk de pom.xml -bestanden van de basis- en kernmodule bij om de OSGi-bundel toe te voegen als een afhankelijkheid met de system scope en systemPath die naar het bundelbestand wijzen. Deze stap is noodzakelijk om het project te compileren.

Een externe pot installeren in een AEM project

In dit voorbeeld is my-example-jar geen OSGi-bundel, maar een Java-jar-bestand.

Laten wij een demo mijn-voorbeeld-jarinstalleren en gebruiken dat niet beschikbaar in de openbare GeMaven bewaarplaats aan het AEM WKND project is.

my-example-jar is een Jar dossier van Java dat een MyHelloWorldService klasse met een sayHello() methode bevat die Hello World! bericht terugkeert.

Voor meer details, verwijs naar het README.md- dossier in het my-example-jar.zipdossier.

De jar toevoegen aan de module all

De eerste stap bestaat uit het toevoegen van my-example-jar aan de module all van het AEM WKND-project.

  • Download en haal het {🔗 dossier 0} my-example-jar.zip.

  • Maak in de module all van AEM WKND-project de mappenstructuur van all/resource/jar .

  • Kopieer het my-example-jar-1.0-SNAPSHOT.jar -bestand uit de uitgepakte target -map naar de bovenstaande all/resource/jar -map.

    derde-partij-jar in alle module

De service van de pot gebruiken

Laten we de MyHelloWorldService uit de my-example-jar gebruiken in het AEM WKND-project.

  • Maak in de module core van AEM WKND-project de SayHello.java Sling servlet @ 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());
        }
    }
    
  • Voeg in het hoofdbestand pom.xml van het AEM WKND-project de my-example-jar toe als een afhankelijkheid.

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

    Hier:

    • Het bereik system geeft aan dat de afhankelijkheid niet moet worden opgezocht in de openbare Maven-opslagruimte.
    • systemPath is het pad naar het my-example-jar -bestand in de module all van het AEM WKND-project.
    • ${maven.multiModuleProjectDirectory} is een Maven bezit dat aan de wortelfolder van het multi-moduleproject richt.
  • Breng twee wijzigingen aan in het bestand core/pom.xml van de module core van AEM WKND-project:

    • Voeg de my-example-jar toe als afhankelijkheid.

      code language-xml
      ...
      <!-- My Example JAR -->
      <dependency>
          <groupId>com.my.example</groupId>
          <artifactId>my-example-jar</artifactId>
      </dependency>
      ...
      
    • Werk bnd-maven-plugin -configuratie bij om de my-example-jar op te nemen in de OSGi-bundel (aem-guides-wknd.core) die wordt gebouwd.

      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>
      ...
      
  • Bouw en stel het AEM WKND- project op gebruikend het volgende bevel:

    code language-none
    $ mvn clean install -PautoInstallPackage
    
  • Controleer of de SayHello servlet naar behoren werkt door de URL http://localhost:4502/bin/sayhello in de browser te openen.

  • Leg bovenstaande wijzigingen vast in de opslagplaats van het AEM WKND-project. Dan verifieer de veranderingen in RDE of AEM milieu door de pijpleiding van Cloud Manager in werking te stellen.

    verifieer de HaveHello servlet - de Dienst van JAR

De leerprogramma/installatie-3de-partij-jartak van het AEM WKND project heeft de bovengenoemde veranderingen voor uw verwijzing.

In scenario's waar het Jar dossier van Java in de openbare Gemaakt bewaarplaats beschikbaar is maar GEEN bundel OSGi is, kunt u de bovengenoemde stappen volgen behalve <dependency> system werkingsgebied en systemPath elementen niet worden vereist.

Belangrijke lessen key-learnings-jar

De Java-potten die geen OSGi-bundels zijn en al dan niet beschikbaar zijn in de openbare Maven-opslagplaats, kunnen in een AEM project worden geïnstalleerd door de volgende stappen uit te voeren:

  • Werk de bnd-maven-plugin configuratie in het dossier van de kernmodule pom.xml bij om Java als gealigneerde middel in de bundel te omvatten OSGi die wordt gebouwd.

De volgende stappen zijn alleen vereist als de Java-jar niet beschikbaar is in de openbare Maven-opslagplaats:

  • Kopieer de Java-jar naar de map resource/jar van de module all .

  • Werk de pom.xml -bestanden van de basis- en kernmodule bij om de Java-jar toe te voegen als een afhankelijkheid met de system scope en systemPath die naar het jar-bestand wijzen.

Een pakket van derden installeren in een AEM project

Laat ACS AEM CommonsSNAPSHOT versie installeren die plaatselijk van de belangrijkste tak wordt gebouwd.

Het is louter bedoeld om de stappen aan te tonen voor de installatie van een AEM die niet beschikbaar is in de openbare Maven-opslagplaats.

Het ACS AEM Commons-pakket is beschikbaar in de openbare Maven-opslagplaats. Verwijs ACS AEM Commons aan uw AEM Gemaakt projecttoe om het aan uw AEM project toe te voegen.

Het pakket toevoegen aan de module all

De eerste stap bestaat uit het toevoegen van het pakket aan de module all van het AEM WKND-project.

  • Noteer of verwijder de ACS AEM de versiegebiedsdelen van Commons uit het POM- dossier. Verwijs ACS AEM Commons aan uw AEM Gemaakt projecttoe om het gebiedsdeel te identificeren.

  • Kloon de master tak van de ACS AEM de bewaarplaats van Commonsaan uw lokale machine.

  • Bouw de versie ACS AEM Commons SNAPSHOT gebruikend het volgende bevel:

    code language-none
    $mvn clean install
    
  • Het lokaal gebouwde pakket bevindt zich @ all/target , er zijn twee .zip-bestanden, het ene dat eindigt met -cloud is bedoeld voor AEM as a Cloud Service en het andere voor AEM 6.X.

  • Maak in de module all van AEM WKND-project de mappenstructuur van all/src/main/content/jcr_root/apps/wknd-vendor-packages/container/install . De map /all/src/main/content bestaat, u hoeft alleen de mappen jcr_root/apps/wknd-vendor-packages/container/install te maken.

  • Kopieer het lokaal gebouwde pakketbestand (.zip) naar de map /all/src/main/content/jcr_root/apps/mysite-vendor-packages/container/install .

  • Bouw en stel het AEM WKND- project op gebruikend het volgende bevel:

    code language-none
    $ mvn clean install -PautoInstallPackage
    
  • Verifieer het geïnstalleerde ACS AEM Commons pakket:

    • CRX Package Manager @ http://localhost:4502/crx/packmgr/index.jsp

      ACS AEM het versiepakket van de Lagerhuis

    • De OSGi-console @ http://localhost:4502/system/console/bundles

      ACS AEM de versiebundel van de LGO van de LGO

  • Leg bovenstaande wijzigingen vast in de opslagplaats van het AEM WKND-project. Dan verifieer de veranderingen in RDE of AEM milieu door de pijpleiding van Cloud Manager in werking te stellen.

Belangrijke lessen key-learnings-package

De AEM pakketten die niet beschikbaar zijn in de openbare Maven bewaarplaats kunnen in een AEM project door deze stappen worden geïnstalleerd:

  • Kopieer het pakket naar de map jcr_root/apps/<PROJECT-NAME>-vendor-packages/container/install van de module all . Deze stap is nodig om het pakket te verpakken en te implementeren in de AEM.

Samenvatting

In deze zelfstudie hebt u geleerd hoe u artefacten van derden (bundel, Java jar en pakket) kunt installeren die niet beschikbaar zijn in de openbare Maven-opslagruimte wanneer u een AEM-project maakt en implementeert.

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