Apache Maven を使用して AEM プロジェクトをビルドする方法

このドキュメントでは、Apache Maven に基づく AEM プロジェクトを設定する方法について説明します。

Apache Maven は、ビルドを自動化し、質の高いプロジェクト情報を提供してソフトウェアプロジェクトを管理するためのオープンソースツールです。これは、AEM プロジェクト用に推奨されるビルド管理ツールです。

メリット

Maven に基づく AEM プロジェクトのビルドには以下のメリットがあります。

  • IDE に依存しない開発環境
  • アドビが提供する Maven のアーキタイプおよびアーティファクトの使用
  • Maven ベースの開発の設定用の Apache Sling および Apache Felix ツールセットの使用
  • IDE への読み込みが容易(Eclipse、IntelliJ など)
  • 継続的インテグレーションシステムとの統合が容易

必要条件

このガイドに示す Maven に基づく開発環境を設定するには、開始前に以下のソフトウェアをインストールする必要があります。

  • Apache Maven 3.0.4 以降
  • Oracle Java SE 1.5.x 以降
  • CQ5.5、AEM 5.6 以降

 

メモ

このガイドは Apache Maven 3.0.4 と AEM 5.6.1 を基に作成されています。

概要

ここで示す内容は以下のとおりです。

5 分で完了する作業準備

以下の手順を実行すると、アドビが提供する Maven アーキタイプを使用して、Maven ビルドを使用する作業用 AEM プロジェクトをわずか数分で作成できます。

ここでは、次のことを前提としています。

  • http://localhost:4502/ で AEM を起動し、実行している
  • Java 1.5 以上および Maven 3.0.4 以上がインストールされている
  • インターネットに接続している
  1. アドビの multimodule-content-package-archetype から初期構造を作成します。

    シェルで、プロジェクトを作成するディレクトリに移動します。

    次の例では、読みやすさを重視して改行を使用していますが、すべての内容は 1 行で記述されます。

    $ mvn archetype:generate \
        -DarchetypeRepository=https://repo.adobe.com/nexus/content/groups/public/ \
        -DarchetypeGroupId=com.day.jcr.vault \
        -DarchetypeArtifactId=multimodule-content-package-archetype \
        -DarchetypeVersion=1.0.2 \
        -DgroupId=my-group-id \
        -DartifactId=myproject \
        -Dversion=1.0-SNAPSHOT \
        -Dpackage=com.mycompany.myproject \
        -DappsFolderName=myproject \
        -DartifactName="My Project" \
        -DcqVersion="5.6.1" \
        -DpackageGroup="My Company"
            

    コードサンプルは、例としてのみ使用することを目的としています。

  2. Maven にメッセージが表示されたら、"Y" と入力して Return キーを押し、指定した値を確定します。

    Confirm properties configuration:
    groupId: my-group-id
    artifactId: myproject
    version: 1.0-SNAPSHOT
    package: com.mycompany.myproject
    appsFolderName: myproject
    artifactName: My Project
    cqVersion: 5.6.1
    packageGroup: My Company
     Y: :
            

    コードサンプルは、例としてのみ使用することを目的としています。

  3. プロジェクト用のディレクトリが Maven によって作成されます。作成されたディレクトリに移動します。

    # cd myproject

  4. プロジェクトをビルドして、AEM インスタンスにインストールします。

    # mvn -PautoInstallPackage install

これで、OSGi コンポーネントの bundle モジュールおよびコンポーネント、テンプレート、デザインページなどの content モジュールを含む、Maven で管理される AEM プロジェクトが作成されました。以降の節では、プロジェクトの設定、役立つゴールおよび共通タスクについて詳しく説明します。

AEM プロジェクト用の Maven の詳細な設定

プロジェクト構造の概要

通常、CQ プロジェクトを開発するには、ユーザーインターフェイスコンポーネントと OSGI サービスの両方を作成する必要があります。これらは 2 つの Maven プロジェクトに分けられます。

また、共有設定情報を格納するためのビルドリアクターと親 Maven プロジェクトを作成する必要もあります(これにより、保守が容易になります)。

結果として、プロジェクトファイルに次の階層が使用されます。

  • myproject - ルートフォルダー
    • content - UI リソースを保持するプロジェクトフォルダー
    • bundle - OSGI サービスを格納するプロジェクトフォルダー
    • pom.xml - Maven リアクターと親プロジェクトファイル

プロジェクト構造の作成

アドビでは、新しいプロジェクトの設定を容易に行うための Maven アーキタイプを提供します。アーキタイプについては、ここを参照してください。

ここでは、multimodule-content-package-archetype を使用して、Maven プロジェクトの初期構造を作成します。

次の例では、読みやすさを重視して改行を使用していますが、すべての内容は 1 行で記述されます。

mvn -Padobe-public archetype:generate \
    -DarchetypeRepository=https://repo.adobe.com/nexus/content/groups/public/ \
    -DarchetypeGroupId=com.day.jcr.vault \
    -DarchetypeArtifactId=multimodule-content-package-archetype \
    -DarchetypeVersion=1.0.2
        

コードサンプルは、例としてのみ使用することを目的としています。

いくつかの変数を入力するように Maven から求められます。このページの例では、次の値を使用します。

Define value for property 'groupId': : group-id
Define value for property 'artifactId': : myproject
Define value for property 'version':  1.0-SNAPSHOT: : 1.0-SNAPSHOT
Define value for property 'package':  group-id: : com.mycompany.myproject
Define value for property 'appsFolderName': : myproject
Define value for property 'artifactName': : My Project
Define value for property 'cqVersion': 5.6.1: : 5.6.1
Define value for property 'packageGroup': : My Company
        

コードサンプルは、例としてのみ使用することを目的としています。

リアクターと親 POM ファイル

リアクターと親 POM ファイルの用途は以下のとおりです。

  1. プロジェクト内のすべてのモジュールに共通の依存関係を定義します。
  2. ビルドプラグインの設定を提供します。
  3. ビルドプロセスに使用する共通プロファイルを定義します。
  4. 複数のプラグインで使用するプロパティ(ホスト、ポート、ユーザー名、パスワードなど)を定義します。
  5. 必要に応じて、プロジェクト専用の Maven リポジトリ(アドビの公開リポジトリなど)を定義するために使用できます。
  6. ビルドリアクターとして、プロジェクトに含まれるすべてのモジュールを列挙します(このページに示す例では、contentbundle)。

アーキタイプでは次のプロジェクト定義を作成済みです。

myproject/pom.xml
<?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 -->
    <!-- ====================================================================== -->

    <groupId>my-group-id</groupId>
    <artifactId>myproject</artifactId>
    <version>1.0-SNAPSHOT</version>
    <packaging>pom</packaging>

    <name>My Project - Reactor Project</name>
    <description>Maven Multimodule project for My Project.</description>

    <prerequisites>
        <maven>3.0.2</maven>
    </prerequisites>

    <!-- ====================================================================== -->
    <!-- P R O P E R T I E S -->
    <!-- ====================================================================== -->
    <properties>
        <crx.host>localhost</crx.host>
        <crx.port>4502</crx.port>
        <crx.username>admin</crx.username>
        <crx.password>admin</crx.password>
        <publish.crx.host>localhost</publish.crx.host>
        <publish.crx.port>4503</publish.crx.port>
        <publish.crx.username>admin</publish.crx.username>
        <publish.crx.password>admin</publish.crx.password>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
    </properties>

    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.osgi</groupId>
                <artifactId>org.osgi.core</artifactId>
                <version>4.2.0</version>
                <scope>provided</scope>
            </dependency>
            <dependency>
                <groupId>org.osgi</groupId>
                <artifactId>org.osgi.compendium</artifactId>
                <version>4.2.0</version>
                <scope>provided</scope>
            </dependency>
            <dependency>
                <groupId>org.apache.felix</groupId>
                <artifactId>org.apache.felix.scr.annotations</artifactId>
                <version>1.6.0</version>
                <scope>provided</scope>
            </dependency>
            <dependency>
                <groupId>biz.aQute</groupId>
                <artifactId>bndlib</artifactId>
                <version>1.43.0</version>
                <scope>provided</scope>
            </dependency>
            <dependency>
                <groupId>org.slf4j</groupId>
                <artifactId>slf4j-api</artifactId>
                <version>1.5.10</version>
                <scope>provided</scope>
            </dependency>
            <dependency>
                <groupId>javax.servlet</groupId>
                <artifactId>servlet-api</artifactId>
                <version>2.5</version>
                <scope>provided</scope>
            </dependency>
            <dependency>
                <groupId>javax.jcr</groupId>
                <artifactId>jcr</artifactId>
                <version>2.0</version>
                <scope>provided</scope>
            </dependency>
            <dependency>
                <groupId>org.apache.sling</groupId>
                <artifactId>org.apache.sling.api</artifactId>
                <version>2.2.0</version>
                <scope>provided</scope>
            </dependency>
            <dependency>
                <groupId>org.apache.sling</groupId>
                <artifactId>org.apache.sling.jcr.api</artifactId>
                <version>2.1.0</version>
                <scope>provided</scope>
            </dependency>
            <dependency>
                <groupId>junit</groupId>
                <artifactId>junit</artifactId>
                <version>4.8.1</version>
                <scope>test</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

    <!--
        Inclusion of repositories in POMs is controversial, to say the least.
        It would be best if you proxied the Adobe repository using a Maven
        Repository Manager. Once you do that, remove these sections.
     -->
    <repositories>
        <repository>
            <id>adobe</id>
            <name>Adobe Public Repository</name>
            <url>https://repo.adobe.com/nexus/content/groups/public/</url>
            <layout>default</layout>
        </repository>
    </repositories>
    <pluginRepositories>
        <pluginRepository>
            <id>adobe</id>
            <name>Adobe Public Repository</name>
            <url>https://repo.adobe.com/nexus/content/groups/public/</url>
            <layout>default</layout>
        </pluginRepository>
    </pluginRepositories>

    <build>
        <pluginManagement>
            <plugins>
                <plugin>
                    <groupId>org.apache.felix</groupId>
                    <artifactId>maven-scr-plugin</artifactId>
                    <version>1.7.4</version>
                </plugin>
                <plugin>
                    <groupId>org.apache.felix</groupId>
                    <artifactId>maven-bundle-plugin</artifactId>
                    <version>2.3.7</version>
                </plugin>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-compiler-plugin</artifactId>
                    <version>3.1</version>
                </plugin>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-resources-plugin</artifactId>
                    <version>2.6</version>
                </plugin>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-deploy-plugin</artifactId>
                    <version>2.7</version>
                </plugin>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-install-plugin</artifactId>
                    <version>2.4</version>
                </plugin>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-surefire-plugin</artifactId>
                    <version>2.14.1</version>
                </plugin>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-javadoc-plugin</artifactId>
                    <version>2.9</version>
                </plugin>
                <plugin>
                    <groupId>org.apache.sling</groupId>
                    <artifactId>maven-sling-plugin</artifactId>
                    <version>2.1.0</version>
                    <configuration>
                        <username>${crx.username}</username>
                        <password>${crx.password}</password>
                    </configuration>
                </plugin>
                <plugin>
                    <groupId>com.day.jcr.vault</groupId>
                    <artifactId>content-package-maven-plugin</artifactId>
                    <version>0.0.20</version>
                    <extensions>true</extensions>
                    <configuration>
                        <failOnError>true</failOnError>
                        <username>${crx.username}</username>
                        <password>${crx.password}</password>
                    </configuration>
                </plugin>
                <!--This plugin's configuration is used to store Eclipse
                    m2e settings only. It has no influence on the Maven build itself. -->
                <plugin>
                    <groupId>org.eclipse.m2e</groupId>
                    <artifactId>lifecycle-mapping</artifactId>
                    <version>1.0.0</version>
                    <configuration>
                        <lifecycleMappingMetadata>
                            <pluginExecutions>
                                <pluginExecution>
                                    <pluginExecutionFilter>
                                        <groupId>
                                            org.apache.felix
                                        </groupId>
                                        <artifactId>
                                            maven-scr-plugin
                                        </artifactId>
                                        <versionRange>
                                            [1.0.0,)
                                        </versionRange>
                                        <goals>
                                            <goal>scr</goal>
                                        </goals>
                                    </pluginExecutionFilter>
                                    <action>
                                        <ignore/>
                                    </action>
                                </pluginExecution>
                            </pluginExecutions>
                        </lifecycleMappingMetadata>
                    </configuration>
                </plugin>
            </plugins>
        </pluginManagement>
    </build>

    <profiles>
        <profile>
            <id>autoInstallBundle</id>
            <build>
                <plugins>
                    <plugin>
                        <groupId>org.apache.sling</groupId>
                        <artifactId>maven-sling-plugin</artifactId>
                        <executions>
                            <execution>
                                <id>install-bundle</id>
                                <goals>
                                    <goal>install</goal>
                                </goals>
                            </execution>
                        </executions>
                    </plugin>
                </plugins>
            </build>
        </profile>
    </profiles>
  <modules>
    <module>bundle</module>
    <module>content</module>
  </modules>
</project>
        

コードサンプルは、例としてのみ使用することを目的としています。

メモ

POM へのリポジトリのインクルードに関するアーキタイプの記述に含まれる注意事項:

アーキタイプは、作業を迅速に開始するための独立した設定を生成します。開発プロセス用のツール設定を行う場合は、必要なリポジトリ(repo.adobe.com を含む)を透過的にプロキシする単一のリポジトリマネージャーだけを使用するよう選択できます。

bundle モジュール

bundle モジュールは、プロジェクトで必要な OSGi サービスを格納するために設定されます。

プロジェクトの複雑さに応じて、この設定を調整し、プロジェクトの個々の領域ごとにモジュールを作成できます。例えば、プロジェクト専用のタグライブラリごとに 1 つのバンドルを使用し、インフラストラクチャコンポーネント(ロガー、フィルター、ログインモジュールなど)をビジネスコンポーネント(ワークフローのステップ、ライブアクションファクトリ、コンテンツビルダー、トランスポートハンドラーなど)から切り離すのが一般的です。

Maven アーキタイプで作成済みの構造を次に示します。

.
├── pom.xml
└── src
    ├── main
    │   └── java
    │       └── com
    │           └── mycompany
    │               └── myproject
    │                   ├── HelloService.java
    │                   ├── impl
    │                   │   ├── HelloServiceImpl.java
    │                   │   └── filters
    │                   │       └── LoggingFilter.java
    │                   └── package-info.java
    └── test
        └── java
            └── com
                └── mycompany
                    └── myproject
                        └── SimpleUnitTest.java
        

コードサンプルは、例としてのみ使用することを目的としています。

Maven アーキタイプが生成する POM ファイルを次に示します。

このファイルでは、次のプラグインを設定します。

  • maven-scr-plugin:アノテーションから SCR 記述子を生成します(このプラグインについて詳しくは、Apache Felix プロジェクトの「Apache Felix Maven SCR Plugin」ページを参照)。
  • maven-bundle-plugin:プロジェクトで作成される OSGi バンドルの記号名を定義します(このプラグインの他のオプションについては、Apache Felix プロジェクトの「Apache Felix Bundle Plugin for Maven」ページを参照)。
  • maven-sling-pluginsling:install ゴールを使用してバンドルを AEM に直接インストールできるようにするためのプラグインです。このプラグインについて詳しくは、Apache Sling プロジェクトの「Maven Sling Plugin」ページを参照してください。
  • maven-javadoc-plugin は、パッケージ名に「impl」を含むクラスを、生成されるドキュメントから除外するように設定されます。これは、maven-bundle-pluginimpl という名前のパッケージをマニフェスト内の Export-Packages ヘッダーからデフォルトで除外するためです。
  • モジュール用のパッケージ化は「bundle」に設定されます。これは、Apache Felix Bundle Plugin for Maven で指定されます。

POM の残りの部分では、AEM プロジェクト用の共通の依存関係を定義します。この依存関係の一部は、アーキタイプが付属するサンプルクラスで使用されます。

myproject/bundle/pom.xml
<?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>my-group-id</groupId>
        <artifactId>myproject</artifactId>
        <version>1.0-SNAPSHOT</version>
    </parent>

    <!-- ====================================================================== -->
    <!-- P R O J E C T D E S C R I P T I O N -->
    <!-- ====================================================================== -->

    <artifactId>myproject-bundle</artifactId>
    <packaging>bundle</packaging>
    <name>My Project Bundle</name>

    <dependencies>
        <dependency>
            <groupId>org.osgi</groupId>
            <artifactId>org.osgi.compendium</artifactId>
        </dependency>
        <dependency>
            <groupId>org.osgi</groupId>
            <artifactId>org.osgi.core</artifactId>
        </dependency>
        <dependency>
            <groupId>org.apache.felix</groupId>
            <artifactId>org.apache.felix.scr.annotations</artifactId>
        </dependency>
        <dependency>
            <groupId>biz.aQute</groupId>
            <artifactId>bndlib</artifactId>
        </dependency>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-api</artifactId>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
        </dependency>
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>servlet-api</artifactId>
        </dependency>
        <dependency>
            <groupId>javax.jcr</groupId>
            <artifactId>jcr</artifactId>
        </dependency>
        <dependency>
            <groupId>org.apache.sling</groupId>
            <artifactId>org.apache.sling.api</artifactId>
        </dependency>
        <dependency>
            <groupId>org.apache.sling</groupId>
            <artifactId>org.apache.sling.jcr.api</artifactId>
        </dependency>
    </dependencies>

    <!-- ====================================================================== -->
    <!-- B U I L D D E F I N I T I O N -->
    <!-- ====================================================================== -->
    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.felix</groupId>
                <artifactId>maven-scr-plugin</artifactId>
                <executions>
                    <execution>
                        <id>generate-scr-descriptor</id>
                        <goals>
                            <goal>scr</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
            <plugin>
                <groupId>org.apache.felix</groupId>
                <artifactId>maven-bundle-plugin</artifactId>
                <extensions>true</extensions>
                <configuration>
                    <instructions>
                        <Bundle-SymbolicName>my-group-id.myproject-bundle</Bundle-SymbolicName>
                    </instructions>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.sling</groupId>
                <artifactId>maven-sling-plugin</artifactId>
                <configuration>
                    <slingUrl>http://${crx.host}:${crx.port}/apps/myproject/install</slingUrl>
                    <usePut>true</usePut>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-javadoc-plugin</artifactId>
                 <configuration>
                    <excludePackageNames>
                        *.impl
                    </excludePackageNames>
                 </configuration>
            </plugin>
        </plugins>
    </build>
</project>
        

コードサンプルは、例としてのみ使用することを目的としています。

content モジュール

content モジュールは、次の要素を組み合わせた AEM コンテンツパッケージをビルドするために設定されます。

  • components
  • templates
  • 設定
  • サンプルコンテンツ
  • bundle モジュールによってビルドされる OSGi バンドル

アーキタイプは以下に示す構造を提供します。content モジュールのコンテキストには Java ソースがないので、この構造は標準の Maven Java モジュールとは少し異なります。そのため、モジュールには src/main/content ディレクトリが含まれています。

メモ

bundle モジュールと同様に、プロジェクトの複雑さに応じて個別のモジュールを作成するのが一般的です。具体的には、多くの場合、サンプルコンテンツと設定は個々の Maven モジュールと対応するパッケージを通じて提供されるので、それらの管理とインストールを個別に行うことができます。

.
├── pom.xml
└── src
    └── main
        └── content
            ├── META-INF
            │   └── vault
            │       ├── config.xml
            │       ├── definition
            │       │   └── .content.xml
            │       ├── filter.xml
            │       ├── nodetypes.cnd
            │       └── properties.xml
            └── jcr_root
                └── apps
                    └── myproject
                        ├── config
                        │   └── put-your-configs-here.txt
                        └── install
                            ├── .vltignore
                            └── bundle-will-go-here.txt
        

コードサンプルは、例としてのみ使用することを目的としています。

アーキタイプで生成される POM にはいくつかの注目すべき点があります。

  1. content-package(20 行目)のパッケージ化を使用します。これは content-package-maven-plugin で指定されます。
  2. content-package-maven-plugin は /apps/myproject/install に OSGi バンドルを埋め込むために設定されます(59 ~ 61 行目)(この場合、Apache Sling の JCR Installer Provider がこのバンドルを選択し、OSGi Installer を使用してインストールします)。
  3. また、親 POM で設定されたホストおよびポートでパッケージをインストールするためにも設定されます(64 行目)。
  4. デフォルトでは、content-package-maven-plugin はプロジェクトのリソース定義(30 ~ 39 行目で設定されます)を使用します。
    他の開発ツールによっては、追加のファイル(.git.project など)を除外できます。
  5. プロファイル autoInstallPackage が定義されます。このプロファイルは content-package-maven-plugin の install ゴールを Maven の install フェーズにバインドします。このプロファイルを使用すると、ビルドが完了したパッケージを AEM に自動的にインストールできます。
  6. プロファイル autoInstallPackagePublish が定義されます。発行サーバーに対しても同じ処理が行われます。

メモ

content-package-maven-plugin については、Maven を使用したパッケージの管理を参照してください。

myproject/content/pom.xml
<?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>my-group-id</groupId>
        <artifactId>myproject</artifactId>
        <version>1.0-SNAPSHOT</version>
    </parent>

    <!-- ====================================================================== -->
    <!-- P R O J E C T D E S C R I P T I O N -->
    <!-- ====================================================================== -->

    <artifactId>myproject-content</artifactId>
    <packaging>content-package</packaging>
    <name>My Project Package</name>

    <dependencies>
        <dependency>
            <groupId>${project.groupId}</groupId>
            <artifactId>myproject-bundle</artifactId>
            <version>${project.version}</version>
        </dependency>
    </dependencies>
    <build>
        <resources>
            <resource>
                <directory>src/main/content/jcr_root</directory>
                <filtering>false</filtering>
                <excludes>
                    <exclude>**/.vlt</exclude>
                    <exclude>**/.vltignore</exclude>
                </excludes>
            </resource>
        </resources>

        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-resources-plugin</artifactId>
                <configuration>
                    <includeEmptyDirs>true</includeEmptyDirs>
                </configuration>
            </plugin>

            <plugin>
                <groupId>com.day.jcr.vault</groupId>
                <artifactId>content-package-maven-plugin</artifactId>
                <extensions>true</extensions>
                <configuration>
                    <group>My Company</group>
                    <filterSource>src/main/content/META-INF/vault/filter.xml</filterSource>
                    <embeddeds>
                        <embedded>
                            <groupId>${project.groupId}</groupId>
                            <artifactId>myproject-bundle</artifactId>
                            <target>/apps/myproject/install</target>
                        </embedded>
                    </embeddeds>
                    <targetURL>http://${crx.host}:${crx.port}/crx/packmgr/service.jsp</targetURL>
                </configuration>
            </plugin>
        </plugins>
    </build>
    <profiles>
        <profile>
            <id>autoInstallPackage</id>
            <build>
                <plugins>
                    <plugin>
                        <groupId>com.day.jcr.vault</groupId>
                        <artifactId>content-package-maven-plugin</artifactId>
                        <executions>
                            <execution>
                                <id>install-content-package</id>
                                <phase>install</phase>
                                <goals>
                                    <goal>install</goal>
                                </goals>
                            </execution>
                        </executions>
                    </plugin>
                </plugins>
            </build>
        </profile>
        <profile>
            <id>autoInstallPackagePublish</id>
            <build>
                <plugins>
                    <plugin>
                        <groupId>com.day.jcr.vault</groupId>
                        <artifactId>content-package-maven-plugin</artifactId>
                        <executions>
                            <execution>
                                <id>install-content-package-publish</id>
                                <phase>install</phase>
                                <goals>
                                    <goal>install</goal>
                                </goals>
                                <configuration>
                                    <targetURL>http://${publish.crx.host}:${publish.crx.port}/crx/packmgr/service.jsp</targetURL>
                                    <username>${publish.crx.username}</username>
                                    <password>${publish.crx.password}</password>
                                </configuration>
                            </execution>
                        </executions>
                    </plugin>
                </plugins>
            </build>
        </profile>
    </profiles>
</project>
        

コードサンプルは、例としてのみ使用することを目的としています。

開発サイクルの一般的な手順

ここでは、AEM 開発の基本的なラウンドトリップと関連するタスクについて説明します。

コンテンツパッケージの開発タスク

コンテンツパッケージの一般的な開発サイクルでは、次の処理を行います。

  1. ファイルシステム上またはリポジトリ内でプロジェクトに対する変更を行います。
  2. mvn -PautoInstallPackage clean install を実行して、リポジトリにパッケージをデプロイします。

プロジェクトに対する変更

次の 2 つの方法で、コンテンツまたはプロジェクトに対する変更を行うことができます。

  1. content/src/main/content/jcr_root の下で変更を行って、その変更をリポジトリにデプロイします。
  2. リポジトリ内で変更を行い、vlt ツールを使用してその変更をファイルシステムに同期します。

VLT を使用してファイルシステムとリポジトリの同期を保つ手順について詳しくは、VLT ツールを使用する方法を参照してください。そのための基本的な手順は次のとおりです。

  • リポジトリへのパッケージのインストール
  • content/src/main/content/jcr_root ディレクトリへの移動
  • vlt co --force http://localhost:4502/ の実行 - これにより、コンテンツがリポジトリからファイルシステムにチェックアウトされ、追跡を行うように vlt が設定されます。
  • vlt sync install の実行 - これにより、vlt 同期サービスがリポジトリにインストールされます(まだ使用可能になっていない場合)。
  • vlt sync register の実行 - これにより、このプロジェクトのディレクトリが vlt 同期サービスに登録されます。

この初期設定の実行が完了したら、行った変更に基づいて次のアクションを実行します。

  • リポジトリ内の nt:file に対する変更(ファイルの作成と削除を含む):アクションは不要です(vlt 同期サービスが変更をファイルシステムに同期します)。
  • ファイルシステム上のファイルに対する変更(ファイルの作成と削除を含む):アクションは不要です(vlt 同期サービスが変更をリポジトリに同期します)。
  • リポジトリ内の他のコンテンツに対する変更vlt up を実行し、リポジトリ内での変更を使用してファイルシステムを更新します。
  • ファイルシステム上の content.xml ファイルに対する変更vlt ci を実行して、ファイルシステムの変更をリポジトリにチェックインします。

mvn -PautoInstallPackage clean install

mvn -PautoInstallPackage clean install を実行すると、次の処理が行われます。

  • myproject/content/pom.xml 内の定義に従ってコンテンツパッケージをビルドして、そのパッケージを content/target/myproject-content-1.0-SNAPSHOT.zip に保存します。
  • ローカルの maven リポジトリにパッケージをインストールします(これは Maven の「install」フェーズで必ず行われる処理です)。
  • content モジュールの autoInstallPackage プロファイルをアクティベートします。このプロファイルは content-package-maven-plugin:install ゴールを install フェーズにバインドし、パッケージマネージャーの HTTP API を通じてパッケージを AEM にインストールします。詳しくは、Content Package Maven Plugin を参照してください。

メモ

このコマンドを初めて実行する場合は、content モジュールで bundle が必要なときに、プロジェクトの最上位のディレクトリから実行する必要があります。

その後は、最上位のディレクトリまたは content/ ディレクトリから実行できます。

メモ

コンテンツパッケージをもう一度ビルドする前に、プロジェクトを常にクリーンすることをお勧めします。これは、削除済みのファイルが content/target/vault-work ディレクトリ(そのファイルが以前に content-package-maven-plugin によってコピーされたディレクトリ)からビルドされるコンテンツパッケージに残るためです。

メモ

vlt 同期を使用する場合は、POM の resources セクションに次の除外を追加してください。

<resources>
   <resource>
       <directory>src/main/content/jcr_root</directory>
       <filtering>false</filtering>
       <excludes>
           <exclude>**/.vlt</exclude>
           <exclude>**/.vltignore</exclude>
           <exclude>**/.vlt-sync.log</exclude>
           <exclude>**/.vlt-sync-config.properties</exclude>
       </excludes>
   </resource>
</resources>
        

コードサンプルは、例としてのみ使用することを目的としています。

バンドルの開発タスク

bundle モジュールは標準の Java 設定に従います。プロセスも同様です。

  1. Java ソースに対する変更を行います。
  2. bundle/ ディレクトリで mvn -PautoInstallBundle install を実行してバンドルをコンパイルおよびデプロイします。

メモ

mvn -PautoInstallBundle install が成功するのは、パッケージが少なくとも 1 回インストールされた後のみです。これは、このコマンドの実行に /apps/myproject/install というパスが必要であるためです。

共通タスク

依存関係を追加する方法

プロジェクトの変化と共に、アーキタイプが最初にプロジェクトに追加した依存関係よりも多くの依存関係を扱うようになります。

新しい依存関係の追加には次の手順が含まれます。

  1. 使用するクラス用の Maven コーディネートを指定します。
  2. 対応する依存関係を親 POM に追加します。
  3. 適切な Maven モジュールで依存関係を参照します。

次の例は、bundle モジュールに依存関係を追加して、com.day.cq.wcm.msm.api.LiveActionFactory クラスを使用できるようにする方法を示しています。

  1. Maven コーディネートの指定

    クラスまたはパッケージ用の Maven コーディネートを指定するために、Web コンソールの Packages 画面(http://<host>:<port>/system/console/depfinder)を使用できます。

    「Packages / Classes」入力フィールドに "com.day.cq.wcm.msm.api" と入力して、「Find」をクリックします。次の画面に示すように、Maven で使用できる XML フラグメントが Web コンソールに表示されます。

    file
  2. 親 POM への依存関係の追加

    Web コンソールの XML フラグメントを使用して、親 POM(myproject/pom.xml)の <dependenyManagement> セクションの <dependencies> リストにそのフラグメントを追加します。

    myproject/pom.xml
    <dependencyManagement>
        <dependencies>
            <!-- ... -->
            <dependency>
            	<groupId>com.day.cq.wcm</groupId>
            	<artifactId>cq-msm-api</artifactId>
            	<version>5.6.2</version>
            	<scope>provided</scope>
            </dependency>
            <!-- ... -->
        </dependencies>
    </dependencyManagement>
    
            

    コードサンプルは、例としてのみ使用することを目的としています。

  3. bundle モジュールでの依存関係の参照

    次に、bundle モジュールの <dependencies> リストに依存関係を追加できます。<version><scope> を繰り返す必要はありません。これらは親 POM の定義から派生するためです。

    その後は、LiveActionFactory をコードで使用できます。

    myproject/bundle/pom.xml
    <dependencies>
        <!-- ... -->
        <dependency>
        	<groupId>com.day.cq.wcm</groupId>
        	<artifactId>cq-msm-api</artifactId>
        </dependency>
        <!-- ... -->
    </dependencies>
            

    コードサンプルは、例としてのみ使用することを目的としています。

AEM 製品の依存関係の読み込み

CQ 5.5 または AEM 5.6 を使用する場合は、Maven の依存関係の読み込みを使用して AEM 製品のすべての依存関係をプロジェクトに追加することもできます。

これにより、すべての依存関係に対応したすべての Maven コーディネートを親 POM に追加する手順が不要になります。必要なのは、groupIdartifactId を記述するモジュールへの依存関係の追加のみです。

  1. 次の XML フラグメントを、<dependencyManagement> セクション内の親 POM の <dependencies> リストに追加します。

    10 行目の <scope>import</scope> によって、com.day.cq:cq-quickstart-product-dependencies:5.6.1<dependencyManagement> セクションに記述されている依存関係が親 POM に読み込まれます。そのため、個々の依存関係を手動で追加する必要はありません。

    myproject/pom.xml
    <dependencyManagement>
        <dependencies>
            <!-- ... -->
            <dependency>
                <!-- use com.day.cq.wcm as groupId if you are using an AEM version previous to 5.5 -->
                <groupId>com.day.cq</groupId>
                <artifactId>cq-quickstart-product-dependencies</artifactId>
                <version>5.6.1</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            <!-- ... -->
        </dependencies>
    </dependencyManagement>
            

    コードサンプルは、例としてのみ使用することを目的としています。

  2. 使用する AEM バージョンを調整します(前述の例では 6 ~8 行目)。次の表は、CQ/AEM の各バージョンに使用する Apache Maven GAV コーディネートを示しています。

    バージョン GAV
    AEM 5.6.1 com.day.cq:cq-quickstart-product-dependencies:5.6.1
    AEM 5.6 com.day.cq:cq-quickstart-product-dependencies:5.6.0
    CQ 5.5 com.day.cq:cq-quickstart-product-dependencies:5.5.0
    CQ 5.4 com.day.cq.wcm:cq-quickstart-product-dependencies:5.4.0
    CQ 5.3 com.day.cq.wcm:cq-quickstart-product-dependencies:5.3.0
  3. 前述のとおり、依存関係を使用するモジュールへの依存関係の追加は引き続き必要です。

    myproject/bundle/pom.xml
    <dependencies>
        <!-- ... -->
        <dependency>
        	<groupId>com.day.cq.wcm</groupId>
        	<artifactId>cq-msm-api</artifactId>
        </dependency>
        <!-- ... -->
    </dependencies>
            

    コードサンプルは、例としてのみ使用することを目的としています。

content モジュールにパスを追加する方法

content モジュールには、Maven でビルドされる AEM パッケージ用のフィルターを定義する src/main/content/META-INF/vault/filter.xml ファイルが格納されます。Maven アーキタイプによって作成されるこのファイルは次のようになります。

src/main/content/META-INF/vault/filter.xml
<?xml version="1.0" encoding="UTF-8"?>
<workspaceFilter version="1.0">
    <filter root="/apps/myproject"/>
</workspaceFilter>
        

コードサンプルは、例としてのみ使用することを目的としています。

このファイルは様々な方法で使用されます。

  • パッケージにインクルードするコンテンツを決定するために content-package-maven-plugin で使用します。
  • 考慮するパスを決定するために VLT ツールで使用します。
  • AEM パッケージマネージャーでパッケージが再ビルドされる場合は、インクルードするパスもこのファイルで定義されます。

アプリケーションの要件によっては、次のような他のコンテンツをインクルードするためにこれらのパスを追加する必要があります。

  • ロールアウト設定
  • ブループリント
  • ワークフローモデル
  • デザインページ
  • サンプルコンテンツ

パスを追加するには、<filter> 要素を追加します。

<?xml version="1.0" encoding="UTF-8"?>
<workspaceFilter version="1.0">
    <filter root="/apps/myproject"/>
    <filter root="/etc/msm/rolloutconfigs/myrolloutconfig"/>
    <filter root="/etc/blueprints/mysite/globalsite"/>
    <filter root="/etc/workflow/models/myproject"/>
    <filter root="/etc/designs/myproject"/>
    <filter root="/content/myproject/sample-content"/>
</workspaceFilter>
        

コードサンプルは、例としてのみ使用することを目的としています。

同期を行わずにパスをパッケージに追加する方法

content-package-maven-plugin でビルドされるパッケージに追加する必要があり、ファイルシステムとリポジトリとの間で同期してはならないファイルがある場合は、.vltignore ファイルを使用できます。これらのファイルの構文は .gitignore ファイルと同じです。

例えば、アーキタイプでは、.vltignore ファイルを使用して、バンドルの一部としてインストールする JAR ファイルがファイルシステムに同期されないようにします。

src/main/content/jcr_root/apps/myproject/install/.vltignore
*.jar
        

コードサンプルは、例としてのみ使用することを目的としています。

パッケージにパスを追加せずにパスを同期する方法

ファイルシステムとリポジトリとの間で特定のパスの同期を維持し、AEM にインストールするためにビルドするパッケージにはそのパスをインクルードしない場合があります。

典型的な例として、/libs/foundation というパスがあります。開発の目的では、このパスのコンテンツをファイルシステムで使用できるようにします。例えば、IDE では JSP のインクルード(/libs への JSP のインクルード)を解決できます。しかし、ビルドするパッケージにはそのコンテンツをインクルードしません。これは、カスタム実装で変更してはならない製品コードが /libs のコンテンツに含まれているためです。

そのためには、src/main/content/META-INF/vault/filter-vlt.xml ファイルを指定できます。このファイルが存在する場合は、VLT ツールで使用されます。例えば、vlt upvlt ci の実行時、または vlt sync の設定が完了している場合などです。content-package-maven-plugin では、パッケージの作成時に引き続き src/main/content/META-INF/vault/filter.xml ファイルを使用します。

例えば、/libs/foundation を開発用にローカルで使用できるようにして、パッケージに /apps/myproject だけをインクルードする場合は、次の 2 つのファイルを使用します。

src/main/content/META-INF/vault/filter.xml
<?xml version="1.0" encoding="UTF-8"?>
<workspaceFilter version="1.0">
    <filter root="/apps/myproject"/>
</workspaceFilter>
        

コードサンプルは、例としてのみ使用することを目的としています。

src/main/content/META-INF/vault/filter-vlt.xml
<?xml version="1.0" encoding="UTF-8"?>
<workspaceFilter version="1.0">
    <filter root="/libs/foundation"/>
    <filter root="/apps/myproject"/>
</workspaceFilter>
        

コードサンプルは、例としてのみ使用することを目的としています。

また、これらのファイルをパッケージにインクルードしないように maven-resources-plugin を再設定する必要があります。パッケージのインストール時に filter.xml ファイルは適用されません。パッケージマネージャーを使用してパッケージが再びビルドされる場合にのみ適用されます。

それに応じて、コンテンツの POM の <resources> セクションを変更してください。

src/main/content/pom.xml
<!-- ... -->
<resources>
	<resource>
		<directory>src/main/content/jcr_root</directory>
		<filtering>false</filtering>
		<excludes>
			<exclude>**/.vlt</exclude>
			<exclude>**/.vltignore</exclude>
			<exclude>libs/</exclude>
		</excludes>
	</resource>
</resources>
<!-- ... -->
        

コードサンプルは、例としてのみ使用することを目的としています。

JSP を使用する方法

これまでに説明した Maven 設定では、コンポーネントと対応する JSP もインクルードできるコンテンツパッケージを作成します。ただし、Maven では JSP をコンテンツパッケージに含まれるその他のファイルとして扱い、JSP として認識しません。

AEM でのコンポーネントの動作はまったく同じですが、Maven に JSP を認識させる処理には 2 つの主なメリットがあります。

  • JSP にエラーが含まれている場合に Maven を失敗させることができるので、JSP が最初に AEM にコンパイルされるときではなく、ビルド時にエラーを特定できます。
  • Maven プロジェクトを読み込むことのできる IDE の場合、コード補完とタグライブラリのサポートが JSP で有効になります。

この設定を有効にするには、次の 2 つの処理が必要です。

  1. タグライブラリの依存関係を追加する
  2. Maven コンパイルプロセスの一環として JSP をコンパイルする

タグライブラリの依存関係の追加

以下に示す依存関係を content モジュールの POM に追加する必要があります。

メモ

AEM 製品の依存関係の読み込みで説明したように、製品の依存関係を読み込むのでない限り、依存関係の追加で説明した AEM 設定に一致するバージョンと共に依存関係を親 POM に追加する必要があります。以下の各エントリ内のコメントは、Dependency Finder で検索するパッケージを示しています。

メモ

com.adobe.granite.xssprotection アーティファクトは cq-quickstart-product-dependencies POM にインクルードされません。このアーティファクトには、Dependency Finder から取得されるすべての Maven コーディネートが必要です。

myproject/content/pom.xml
<dependency>
    <groupId>org.apache.sling</groupId>
    <artifactId>org.apache.sling.jcr.jcr-wrapper</artifactId>
    <!-- javax.jcr -->
</dependency>
<dependency>
    <groupId>org.apache.sling</groupId>
    <artifactId>org.apache.sling.api</artifactId>
</dependency>
<dependency>
    <groupId>com.day.cq</groupId>
    <artifactId>cq-commons</artifactId>
    <!-- com.day.cq.commons -->
</dependency>
<dependency>
    <groupId>com.day.cq.wcm</groupId>
    <artifactId>cq-wcm-commons</artifactId>
    <!-- com.day.cq.wcm.commons -->
</dependency>
<dependency>
    <groupId>com.day.cq.wcm</groupId>
    <artifactId>cq-wcm-api</artifactId>
    <!-- com.day.cq.wcm.api -->
</dependency>
<dependency>
    <groupId>com.day.commons</groupId>
    <artifactId>day-commons-jstl</artifactId>
    <!-- javax.servlet.jsp.jstl.core -->
</dependency>
<dependency>
    <groupId>com.day.cq.wcm</groupId>
    <artifactId>cq-wcm-taglib</artifactId>
    <!-- com.day.cq.wcm.tags -->
</dependency>
<dependency>
    <groupId>org.apache.sling</groupId>
    <artifactId>org.apache.sling.scripting.jsp.taglib</artifactId>
    <!-- org.apache.sling.scripting.jsp.taglib -->
</dependency>
<dependency>
    <groupId>com.adobe.granite</groupId>
    <artifactId>com.adobe.granite.xssprotection</artifactId>
    <!-- com.adobe.granite.xss -->
</dependency>
<dependency>
    <groupId>com.day.cq.wcm</groupId>
    <artifactId>cq-wcm-core</artifactId>
    <!-- com.day.cq.wcm.core.components -->
</dependency>
<dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-lang3</artifactId>
    <!-- org.apache.commons.lang3 -->
</dependency>
<dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-api</artifactId>
</dependency>
        

コードサンプルは、例としてのみ使用することを目的としています。

Maven の compile フェーズの一環としての JSP のコンパイル

Maven の compile フェーズで JSP をコンパイルするために、Apache Sling の Maven JspC Plugin を以下のように使用します。

  • jspc ゴール(デフォルトで compile フェーズにバインドされるので、フェーズを明示的に指定する必要はありません)の実行を設定します。
  • ${project.build.directory}/jsps-to-compile 内の JSP をコンパイルするように指定します。
  • ${project.build.directory}/ignoredjspcmyproject/content/target/ignoredjspc に変換されます)に結果を出力します。
  • generate-sources フェーズで ${project.build.directory}/jsps-to-compile に JSP をコピーし、libs/ フォルダーをコピーしないように maven-resources-plugin を設定します(このフォルダーには AEM 製品コードが含まれているためです。また、プロジェクトでコンパイルの依存関係が生じないようにする必要があり、プラグインでコンパイルが行われていることを検証する必要はないためです)。

前述のとおり、第 1 の目的は JSP を検証し、JSP にエラーが含まれている場合にビルドプロセスを失敗させることです。そのため、無視される(実際には後ですぐに削除される)個別のディレクトリに対して JSP をコンパイルします。

また、Maven JspC Plugin の結果を OSGi バンドルの一部としてバンドルおよびデプロイすることもできますが、これにより他の影響や副作用が生じ、JSP の検証という目的を逸脱してしまいます。

JSP からコンパイルされたクラスを削除するために、次に示すように Maven Clean Plugin を設定します。Maven JspC Plugin の結果を調べる場合は、myproject/contentmvn compile を実行します。その後、myproject/content/target/ignoredjspc で結果を確認します。

myproject/content/pom.xml
<build>
  <!-- ... -->
  <plugins>
    <!-- ... -->
    <plugin>
      <artifactId>maven-resources-plugin</artifactId>
      <executions>
        <execution>
          <id>copy-resources</id>
          <phase>generate-sources</phase>
          <goals>
            <goal>copy-resources</goal>
          </goals>
          <configuration>
            <outputDirectory>${project.build.directory}/jsps-to-compile</outputDirectory>
            <resources>
              <resource>
                <directory>src/main/content/jcr_root</directory>
                <excludes>
                  <exclude>libs/**</exclude>
                </excludes>
              </resource>
            </resources>
          </configuration>
        </execution>
      </executions>
    </plugin>
    <plugin>
      <groupId>org.apache.sling</groupId>
      <artifactId>maven-jspc-plugin</artifactId>
      <version>2.0.6</version>
      <executions>
        <execution>
          <id>compile-jsp</id>
          <goals>
            <goal>jspc</goal>
          </goals>
          <configuration>
            <jasperClassDebugInfo>false</jasperClassDebugInfo>
            <sourceDirectory>${project.build.directory}/jsps-to-compile</sourceDirectory>
            <outputDirectory>${project.build.directory}/ignoredjspc</outputDirectory>
          </configuration>
        </execution>
      </executions>
    </plugin>
    <plugin>
      <artifactId>maven-clean-plugin</artifactId>
      <executions>
        <execution>
          <id>remove-compiled-jsps</id>
          <goals>
            <goal>clean</goal>
          </goals>
          <phase>process-classes</phase>
          <configuration>
            <excludeDefaultDirectories>true</excludeDefaultDirectories>
            <filesets>
              <fileset>
                <directory>${project.build.directory}/jsps-to-compile</directory>
                <directory>${project.build.directory}/ignoredjspc</directory>
              </fileset>
            </filesets>
          </configuration>
        </execution>
      </executions>
    </plugin>
  </plugins>
</build>
        

コードサンプルは、例としてのみ使用することを目的としています。

メモ

実際に /libs 内の JSP コードを利用する(このフォルダーから JSP をインクルードする)かどうかに応じて、コンパイル用にコピーする JSP を絞り込む必要があります。

例えば、/libs/foundation/global.jsp をインクルードする場合は、/libs を完全にスキップする前述の設定ではなく、次の設定を maven-resources-plugin に使用できます。

  <resource>  
      <directory>src/main/content/jcr_root</directory>  
      <includes>  
          <include>apps/**</include>  
          <include>libs/foundation/global.jsp</include>
    </includes>  
  </resource>  

SCM システムを使用する方法

ソース設定管理(SCM)を使用する場合は、次のことを確認する必要があります。

  • VCS がファイルシステム内のソース以外のアーティファクトを無視する
  • VLT が VCS のアーティファクトを無視し、それらをリポジトリにチェックインしない

メモ

この説明には、SCM を使用するように Maven を設定する方法は含まれていません。この方法について詳しくは、Maven の POM リファレンスおよび Maven SCM Plugin のドキュメントを参照してください。

SCM から除外するパターン

SCM から除外する一般的なパターンのリストを次に示します。例えば、git を使用する場合は、これらのパターンをプロジェクトの .gitignore ファイルに追加できます。

サンプルの .gitignore
# Ignore VLT files
.vlt
.vlt-sync.log
.vlt-sync-config.properties

# Ignore Quickstart launches in the source tree
license.properties
crx-quickstart

# Ignore compilation results
target

# Ignore IDE and Operating System artifacts
.idea
.classpath
.metadata
.project
.settings
maven-eclipse.xml
*.iml
*.ipr
*.iws
.DS_Store
        

コードサンプルは、例としてのみ使用することを目的としています。

VLT での SCM 制御ファイルの無視

リポジトリにチェックインしたくないコンテンツのソースツリーに SCM 制御ファイルが含まれている場合があります。

次の状況について考えてみましょう。

インストールしたバンドルの jar ファイルがファイルシステムに同期されないようにするために、アーキタイプでは既に .vltignore ファイルを作成済みです。

src/main/content/jcr_root/apps/myproject/install/.vltignore
*.jar
        

コードサンプルは、例としてのみ使用することを目的としています。

当然、このファイルは SCM に追加したくないので、例えば git を使用する場合は、対応する .gitignore ファイルを追加します。

src/main/content/jcr_root/apps/myproject/install/.gitignore
*.jar
        

コードサンプルは、例としてのみ使用することを目的としています。

.gitignore ファイルをリポジトリに格納することはできないので、.gitignore ファイルをインクルードするように .vltignore ファイルを拡張する必要があります。

src/main/content/jcr_root/apps/myproject/install/.vltignore
*.jar
.gitignore
        

コードサンプルは、例としてのみ使用することを目的としています。

デプロイメントプロファイルを使用する方法

ビルドプロセスが大規模な開発ライフサイクル管理の設定(継続的インテグレーションプロセスなど)に含まれている場合は、開発者のローカルインスタンスだけではなく、他のマシンへのデプロイが必要になることが多くなります。

このようなシナリオでは、プロジェクトの POM に新しい Maven のビルドプロファイルを簡単に追加できます。

次に示す例では、integrationServer というプロファイルを追加します。このプロファイルでは、作成者インスタンスと発行インスタンス用のホスト名とポートを再定義します。次に示すようにプロジェクトのルートから maven を実行して、これらのサーバーにデプロイできます。

# install on integration test author
$ mvn -PautoInstallPackage -PintegrationServer install

# install on integration test publisher
$ mvn -PautoInstallPackagePublish -PintegrationServer install
        

コードサンプルは、例としてのみ使用することを目的としています。

myproject/pom.xml
<profiles>

    <!-- ... -->
    
    <profile>
        <id>integrationServer</id>
        <properties>
            <crx.host>dev-author.intranet</crx.host>
            <crx.port>5502</crx.port>
            <publish.crx.host>dev-publish.intranet</publish.crx.host>
            <publish.crx.port>5503</publish.crx.port>
        </properties>
    </profile>
</profiles>
        

コードサンプルは、例としてのみ使用することを目的としています。

​