Pacchetto per la struttura dell’archivio dei progetti AEM

I progetti Maven per Adobe Experience Manager come Cloud Service richiedono una definizione di sottopacchetto della struttura del repository il cui unico scopo è definire le radici del repository JCR in cui vengono distribuiti i sottopacchetti di codice del progetto. In questo modo, l'installazione dei pacchetti nel Experience Manager come Cloud Service viene ordinata automaticamente dalle dipendenze delle risorse JCR. Le dipendenze mancanti potrebbero causare l'installazione di sottostrutture in anticipo rispetto alle strutture padre e, di conseguenza, la rimozione imprevista, interrompendo la distribuzione.

Se il pacchetto di codice viene distribuito in una posizione non inclusa nel pacchetto stesso, tutte le risorse precedenti (risorse JCR più vicine alla radice JCR) devono essere enumerate nel pacchetto della struttura dell’archivio per stabilire tali dipendenze.

Pacchetto struttura archivio

Il pacchetto della struttura del repository definisce lo stato comune previsto di /apps che il validatore del pacchetto utilizza per determinare le aree "sicure da potenziali conflitti" in quanto sono radici standard.

I percorsi più comuni da includere nel pacchetto della struttura del repository sono:

  • /apps che è un nodo fornito dal sistema
  • /apps/cq/..., /apps/dam/..., /apps/wcm/...e /apps/sling/... che forniscono sovrapposizioni comuni per /libs.
  • /apps/settings che è il percorso principale di configurazione basato sul contesto condiviso

Tenete presente che questo sottopacchetto non contiene e comprende solo un pom.xml che definisce le radici del filtro.

Creazione del pacchetto struttura archivio

Per creare un pacchetto di struttura del repository per il progetto Maven, create un nuovo sottoprogetto Maven vuoto, con il seguente pom.xml, aggiornando i metadati del progetto in modo che siano conformi al progetto Maven principale.

Aggiornate la <filters> per includere tutte le radici del percorso del repository JCR nelle quali i pacchetti di codice distribuiscono.

Assicurarsi di aggiungere questo nuovo sottoprogetto Maven all'elenco dei progetti padre <modules>.

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <!-- ====================================================================== -->
    <!-- P A R E N T  P R O J E C T  D E S C R I P T I O N                      -->
    <!-- ====================================================================== -->
    <parent>
        <groupId>com.my-company</groupId>
        <artifactId>my-app</artifactId>
        <version>x.x.x</version>
        <relativePath>../pom.xml</relativePath>
    </parent>

    <!-- ====================================================================== -->
    <!-- P R O J E C T  D E S C R I P T I O N                                   -->
    <!-- ====================================================================== -->
    <artifactId>ui.apps.structure</artifactId>
    <packaging>content-package</packaging>
    <name>UI Apps Structure - Repository Structure Package for /apps</name>

    <description>
        Empty package that defines the structure of the Adobe Experience Manager repository the code packages in this project deploy into.
        Any roots in the code packages of this project should have their parent enumerated in the filters list below.
    </description>

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.jackrabbit</groupId>
                <artifactId>filevault-package-maven-plugin</artifactId>
                <extensions>true</extensions>
                <properties>
                    <!-- Set Cloud Manager Target to none, else this package will be deployed and remove all defined filter roots -->
                    <cloudManagerTarget>none</cloudManagerTarget>
                </properties>
                <configuration>
                    <properties>
                        <!-- Set Cloud Manager Target to none, else this package will be deployed and remove all defined filter roots -->
                        <cloudManagerTarget>none</cloudManagerTarget>
                    </properties>
                    <filters>

                        <!-- /apps root -->
                        <filter><root>/apps</root></filter>

                        <!--
                        Examples of complex roots


                        Overlays of /libs typically require defining the overlayed structure, at each level here.

                        For example, adding a new section to the main AEM Tools navigation, necessitates the following rules:

                        <filter><root>/apps/cq</root></filter>
                        <filter><root>/apps/cq/core</root></filter>
                        <filter><root>/apps/cq/core/content</root></filter>
                        <filter><root>/apps/cq/core/content/nav/</root></filter>
                        <filter><root>/apps/cq/core/content/nav/tools</root></filter>


                        Any /apps level Context-aware configurations need to enumerated here. 
                        
                        For example, providing email templates under `/apps/settings/notification-templates/com.day.cq.replication` necessitates the following rules:

                        <filter><root>/apps/settings</root></filter>
                        <filter><root>/apps/settings/notification-templates</root></filter>
                        <filter><root>/apps/settings/notification-templates/com.day.cq.replication</root></filter>
                        -->

                    </filters>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>

Riferimento al pacchetto della struttura dell'archivio

Per utilizzare il pacchetto della struttura del repository, farvi riferimento tramite tutti i pacchetti di codice (i pacchetti secondari che distribuiscono a /apps) progetti Maven tramite la configurazione dei plug-in Maven del pacchetto di contenuti FileVault <repositoryStructurePackage>.

In ui.apps/pom.xml e in qualsiasi altro pacchetto di codice pom.xmls, aggiungere un riferimento alla configurazione del pacchetto della struttura del repository del progetto (#repository-structure-package) al plug-in Maven del pacchetto FileVault.

...
<build>
  <plugins>
    <plugin>
      <groupId>org.apache.jackrabbit</groupId>
      <artifactId>filevault-package-maven-plugin</artifactId>
      <extensions>true</extensions>
      <configuration>
        ...
        <repositoryStructurePackages>
          <repositoryStructurePackage>
              <groupId>${project.groupId}</groupId>
              <artifactId>ui.apps.structure</artifactId>
              <version>${project.version}</version>
          </repositoryStructurePackage>
        </repositoryStructurePackages>
      </configuration>
    </plugin>
    ...
</build>
<dependencies>
    <!-- Add the dependency for the repository structure package so it resolves -->
    <dependency>
        <groupId>${project.groupId}</groupId>
        <artifactId>ui.apps.structure</artifactId>
        <version>${project.version}</version>
        <type>zip</type>
    </dependency>
    ...
</dependencies>

Caso di utilizzo per più codici

Un caso d’uso meno comune e più complesso supporta la distribuzione di più pacchetti di codice che si installano nelle stesse aree dell’archivio JCR.

Esempio:

  • Il pacchetto di codice A viene distribuito in /apps/a
  • Il pacchetto di codice B viene distribuito in /apps/a/b

Se una dipendenza a livello di pacchetto non viene stabilita dal pacchetto di codice B nel pacchetto di codice A, il pacchetto di codice B può essere implementato prima in /apps/a, seguito dal pacchetto di codice B, che si distribuisce in /apps/a, con conseguente rimozione dell'installazione precedente /apps/a/b.

In questo caso:

  • Il pacchetto di codice A deve definire un <repositoryStructurePackage> nel pacchetto della struttura del repository del progetto (che deve avere un filtro per /apps).
  • Il pacchetto di codice B deve definire un <repositoryStructurePackage> nel pacchetto di codice A, perché il pacchetto di codice B si distribuisce nello spazio condiviso dal pacchetto di codice A.

Errori e debug

Se i pacchetti della struttura dell'archivio non sono configurati correttamente, in Maven build verrà segnalato un errore:

1 error(s) detected during dependency analysis.
Filter root's ancestor '/apps/some/path' is not covered by any of the specified dependencies.

Indica che il pacchetto del codice di interruzione non ha un <repositoryStructurePackage> in cui è elencato /apps/some/path nel relativo elenco di filtri.

Risorse aggiuntive

In questa pagina