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- project
pom.xml
dossier. Hier wordt het bereikprovided
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 hetcompile
werkingsgebied gebruiken en het is het standaardwerkingsgebied. -
Gedeelde WKNDpakket wordt toegevoegd als gebiedsdeel in het WKND- project
pom.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:
-
De lokale AEM ontwikkelomgevingof Snelle Milieu van de Ontwikkeling (RDE)opstelling.
-
Het AEM project WKNDom de derdebundel of de pot of het pakket toe te voegen en de veranderingen te verifiëren.
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 vanall/src/main/content/jcr_root/apps/wknd-vendor-packages/container/install
. De map/all/src/main/content
bestaat, u hoeft alleen de mappenjcr_root/apps/wknd-vendor-packages/container/install
te maken. -
Kopieer het
my-example-bundle-1.0-SNAPSHOT.jar
-bestand uit de uitgepaktetarget
-map naar de bovenstaandeall/src/main/content/jcr_root/apps/wknd-vendor-packages/container/install
-map.
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 deSayHello.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 demy-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 hetmy-example-bundle
-bestand in de moduleall
van het AEM WKND-project.${maven.multiModuleProjectDirectory}
is een Maven bezit dat aan de wortelfolder van het multi-moduleproject richt.
- Het bereik
-
Voeg in het bestand
core/pom.xml
van de modulecore
van AEM WKND-project demy-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 URLhttp://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.
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 moduleall
. 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 desystem
scope ensystemPath
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 vanall/resource/jar
. -
Kopieer het
my-example-jar-1.0-SNAPSHOT.jar
-bestand uit de uitgepaktetarget
-map naar de bovenstaandeall/resource/jar
-map.
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 deSayHello.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 demy-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 hetmy-example-jar
-bestand in de moduleall
van het AEM WKND-project.${maven.multiModuleProjectDirectory}
is een Maven bezit dat aan de wortelfolder van het multi-moduleproject richt.
- Het bereik
-
Breng twee wijzigingen aan in het bestand
core/pom.xml
van de modulecore
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 demy-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 URLhttp://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.
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 kernmodulepom.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 moduleall
. -
Werk de
pom.xml
-bestanden van de basis- en kernmodule bij om de Java-jar toe te voegen als een afhankelijkheid met desystem
scope ensystemPath
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 vanall/src/main/content/jcr_root/apps/wknd-vendor-packages/container/install
. De map/all/src/main/content
bestaat, u hoeft alleen de mappenjcr_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
-
De OSGi-console @
http://localhost:4502/system/console/bundles
-
-
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 moduleall
. 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.