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 project van AEM 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:
-
de bundel van de Kern van AEM WCM wordt toegevoegd als gebiedsdeel in het WKND- project dossier.
pom.xmlHier wordt het bereikprovidedgebruikt omdat de AEM WCM Core Components-bundel wordt geleverd door de AEM-runtime. Als de bundel niet door de runtime van AEM wordt verstrekt, zou u hetcompilewerkingsgebied gebruiken en het is het standaardwerkingsgebied. -
Gedeelde WKND pakket wordt toegevoegd als gebiedsdeel in het WKND- project
pom.xmldossier.
Zeldzame scenario
Af en toe, wanneer het bouwen van en het opstellen van een project van AEM, kunt u een derdebundel of jar of pakket moeten installeren die niet in Gemaakt Centrale Bewaarplaats of Openbare Bewaarplaats van Adobe beschikbaar is.
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 ontwikkelomgeving van AEM of Snelle Milieu van de Ontwikkeling (RDE) opstelling.
-
Het project van AEM WKND om de derdebundel of jar of pakket toe te voegen en de veranderingen te verifiëren.
Instellen
-
Stel de lokale ontwikkelomgeving van AEM 6.X of AEM as a Cloud Service (AEMCS) of de RDE-omgeving in.
-
Het AEM WKND-project klonen en implementeren.
code language-none $ git clone git@github.com:adobe/aem-guides-wknd.git $ cd aem-guides-wknd $ mvn clean install -PautoInstallPackageControleer of de WKND-sitepagina's correct worden weergegeven.
Een bundel van derden installeren in een AEM-project install-third-party-bundle
Laten wij een demo OSGi mijn-voorbeeld-bundel installeren en gebruiken dat niet beschikbaar in de openbare GeMaven bewaarplaats aan het project van AEM WKND 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 de mappenstructuur van
allin de moduleall/src/main/content/jcr_root/apps/wknd-vendor-packages/container/installvan het AEM WKND-project. De map/all/src/main/contentbestaat, u hoeft alleen de mappenjcr_root/apps/wknd-vendor-packages/container/installte 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
corevan het AEM WKND-project deSayHello.javaSling 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 de
pom.xmltoe als afhankelijkheid in het hoofdbestandmy-example-bundlevan het AEM WKND-project.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
systemgeeft aan dat de afhankelijkheid niet moet worden opgezocht in de openbare Maven-opslagruimte. systemPathis het pad naar hetmy-example-bundle-bestand in de moduleallvan 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
corevan de modulecore/pom.xmlvan de AEM WKND-project demy-example-bundleals een afhankelijkheid toe.code language-xml ... <!-- My Example Bundle --> <dependency> <groupId>com.example</groupId> <artifactId>my-example-bundle</artifactId> </dependency> ... -
Bouw en stel het project van AEM WKND gebruikend het volgende bevel op:
code language-none $ mvn clean install -PautoInstallPackage -
Controleer of de
SayHelloservlet naar behoren werkt door de URLhttp://localhost:4502/bin/sayhelloin de browser te openen. -
Leg bovenstaande wijzigingen vast in de opslagplaats van het AEM WKND-project. Dan verifieer de veranderingen in het milieu RDE of van AEM door de pijpleiding van Cloud Manager in werking te stellen.
De leerprogramma/installatie-3de partij-bundel tak van het project van AEM WKND heeft de bovengenoemde veranderingen voor uw verwijzing.
Belangrijke lessen key-learnings-bundle
De OSGi-bundels die niet beschikbaar zijn in de openbare Maven-opslagplaats kunnen in een AEM-project worden geïnstalleerd door de volgende stappen uit te voeren:
-
Kopieer de OSGi-bundel naar de map
allvan de modulejcr_root/apps/<PROJECT-NAME>-vendor-packages/container/install. Deze stap is nodig om de bundel in een pakket te plaatsen en in te zetten op 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 desystemscope ensystemPathdie 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-jar installeren en gebruiken dat niet beschikbaar in de openbare GeMaven bewaarplaats aan het project van AEM WKND 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.zip dossier.
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 de mappenstructuur van
allin de moduleall/resource/jarvan het AEM WKND-project. -
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
corevan het AEM WKND-project deSayHello.javaSling 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 de
pom.xmltoe als afhankelijkheid in het hoofdbestandmy-example-jarvan het AEM WKND-project.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
systemgeeft aan dat de afhankelijkheid niet moet worden opgezocht in de openbare Maven-opslagruimte. systemPathis het pad naar hetmy-example-jar-bestand in de moduleallvan 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
corevan de modulecore/pom.xmlvan AEM WKND:-
Voeg de
my-example-jartoe 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-jarop 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 project van AEM WKND gebruikend het volgende bevel op:
code language-none $ mvn clean install -PautoInstallPackage -
Controleer of de
SayHelloservlet naar behoren werkt door de URLhttp://localhost:4502/bin/sayhelloin de browser te openen. -
Leg bovenstaande wijzigingen vast in de opslagplaats van het AEM WKND-project. Dan verifieer de veranderingen in het milieu RDE of van AEM door de pijpleiding van Cloud Manager in werking te stellen.
De leerprogramma/installatie-3de-partij-jar tak van het project van AEM WKND 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-pluginconfiguratie in het dossier van de kernmodulepom.xmlbij 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
allvan de moduleresource/jar. -
Werk de
pom.xml-bestanden van de basis- en kernmodule bij om de Java-jar toe te voegen als een afhankelijkheid met desystemscope ensystemPathdie naar het jar-bestand wijzen.
Een pakket van derden installeren in een AEM-project
Laat ACS AEM Commons SNAPSHOT versie installeren plaatselijk van de belangrijkste tak wordt gebouwd.
Dit is louter bedoeld om de stappen aan te tonen voor de installatie van een AEM-pakket dat 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 project toevoegen om het aan uw project van AEM 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.
-
Maak een opmerking over of verwijder de ACS AEM Commons-afhankelijkheid van het POM-bestand. Verwijs ACS AEM Commons aan uw AEM Gemaakt project toevoegen om het gebiedsdeel te identificeren.
-
Kloon de
mastertak van de ACS AEM Commons bewaarplaats aan uw lokale machine. -
Bouw de ACS AEM Commons SNAPSHOT versie 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-cloudis bedoeld voor AEM as a Cloud Service en het andere voor AEM 6.X. -
Maak de mappenstructuur van
allin de moduleall/src/main/content/jcr_root/apps/wknd-vendor-packages/container/installvan het AEM WKND-project. De map/all/src/main/contentbestaat, u hoeft alleen de mappenjcr_root/apps/wknd-vendor-packages/container/installte 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 project van AEM WKND gebruikend het volgende bevel op:
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 het milieu RDE of van AEM 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-opslagplaats kunnen in een AEM-project worden geïnstalleerd door de volgende stappen uit te voeren:
- Kopieer het pakket naar de map
allvan de modulejcr_root/apps/<PROJECT-NAME>-vendor-packages/container/install. Deze stap is nodig om het pakket te verpakken en te implementeren in de AEM-instantie.
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 bij het bouwen en implementeren van een AEM-project.