サードパーティアーティファクトのインストール - 公開 Maven リポジトリでは入手できないもの
AEM プロジェクトを構築およびデプロイする際に、公開 Maven リポジトリでは入手できないサードパーティアーティファクトをインストールする方法について説明します。
サードパーティアーティファクトに該当するのは、以下のようなものです。
標準シナリオ
通常は、AEM プロジェクトの pom.xml ファイルの依存関係として、公開 Maven リポジトリで 入手可能 なサードパーティのバンドルパッケージをインストールします。
例:
-
AEM WCM コアコンポーネントバンドルは、WKND プロジェクトの
pom.xmlファイルに依存関係として追加されます。ここでは、AEM WCM コアコンポーネントバンドルが AEM ランタイムによって提供されるので、provided範囲が使用されます。バンドルが AEM ランタイムによって提供されない場合は、compile範囲を使用します。これがデフォルトの範囲になります。 -
WKND 共有パッケージは、WKND プロジェクトの
pom.xmlファイルに依存関係として追加されます。
まれなシナリオ
場合によっては、AEM プロジェクトを構築およびデプロイする際に、Maven Central リポジトリまたはアドビの公開リポジトリで 入手できない サードパーティのバンドル、jar、パッケージをインストールする必要が生じることがあります。
理由は、以下が考えられます。
-
バンドルまたはパッケージは内部チームまたはサードパーティベンダーによって提供され、公開 Maven リポジトリでは入手できない。
-
Java™ jar ファイルは OSGi バンドルではないので、公開 Maven リポジトリで使用できる場合とできない場合がある。
-
公開 Maven リポジトリで入手可能なサードパーティパッケージの最新バージョンでまだリリースされていない機能が必要。ローカルで構築されたリリースバージョンまたはスナップショットバージョンをインストールすることにした。
前提条件
このチュートリアルに従うには、以下が必要です。
-
ローカル AEM 開発環境または高速開発環境(RDE)の設定。
-
サードパーティのバンドル、jar、またはパッケージを追加し、変更を確認するための AEM WKND プロジェクト。
設定
-
AEM 6.X または AEM as a Cloud Service(AEMCS)のローカル開発環境または RDE 環境を設定します。
-
AEM WKND プロジェクトのクローンを作成してデプロイします。
code language-none $ git clone git@github.com:adobe/aem-guides-wknd.git $ cd aem-guides-wknd $ mvn clean install -PautoInstallPackageWKND サイトページが正しくレンダリングされていることを確認します。
AEM プロジェクトへのサードパーティバンドルのインストール install-third-party-bundle
公開 Maven リポジトリでは入手できないデモ OSGi my-example-bundle を AEM WKND プロジェクトにインストールおよび使用しましょう。
my-example-bundle は HelloWorldService OSGi サービスを書き出し、その sayHello() メソッドは Hello Earth! メッセージを返します。
詳しくは、my-example-bundle.zip ファイル内の README.md ファイルを参照してください。
all モジュールへのバンドルの追加
最初の手順では、my-example-bundle を AEM WKND プロジェクトの all モジュールに追加します。
-
my-example-bundle.zip ファイルをダウンロードして抽出します。
-
AEM WKND プロジェクトの
allモジュールで、all/src/main/content/jcr_root/apps/wknd-vendor-packages/container/installディレクトリ構造を作成します。/all/src/main/contentディレクトリが存在するので、jcr_root/apps/wknd-vendor-packages/container/installディレクトリのみを作成する必要があります。 -
抽出した
targetディレクトリからmy-example-bundle-1.0-SNAPSHOT.jarファイルを上記のall/src/main/content/jcr_root/apps/wknd-vendor-packages/container/installディレクトリにコピーします。
バンドルからのサービスの使用
AEM WKND プロジェクトの my-example-bundle から HelloWorldService OSGi サービスを使用しましょう。
-
AEM WKND プロジェクトの
coreモジュールで、core/src/main/java/com/adobe/aem/guides/wknd/core/servletにSayHello.javaSling サーブレットを作成します。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()); } } -
AEM WKND プロジェクトのルート
pom.xmlファイルに、依存関係としてmy-example-bundleを追加します。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> ...この場合:
system範囲は、依存関係を公開 Maven リポジトリで検索しないことを示します。systemPathは、AEM WKND プロジェクトのallモジュール内のmy-example-bundleファイルへのパスです。${maven.multiModuleProjectDirectory}は、マルチモジュールプロジェクトのルートディレクトリを指す Maven プロパティです。
-
AEM WKND プロジェクトの
coreモジュールのcore/pom.xmlファイルに、依存関係としてmy-example-bundleを追加します。code language-xml ... <!-- My Example Bundle --> <dependency> <groupId>com.example</groupId> <artifactId>my-example-bundle</artifactId> </dependency> ... -
次のコマンドを使用して、AEM WKND プロジェクトを構築およびデプロイします。
code language-none $ mvn clean install -PautoInstallPackage -
ブラウザーで URL
http://localhost:4502/bin/sayhelloにアクセスして、SayHelloサーブレットが期待どおりに動作することを確認します。 -
上記の変更を AEM WKND プロジェクトのリポジトリにコミットします。次に、Cloud Manager パイプラインを実行して、RDE または AEM 環境の変更を確認します。
AEM WKND プロジェクトの tutorial/install-3rd-party-bundle 分岐には、参照用に上記の変更が含まれます。
主な習得事項 key-learnings-bundle
公開 Maven リポジトリで使用できない OSGi バンドルは、次の手順に従って AEM プロジェクトにインストールできます。
-
OSGi バンドルを
allモジュールのjcr_root/apps/<PROJECT-NAME>-vendor-packages/container/installディレクトリにコピーします。この手順は、バンドルをパッケージ化して AEM インスタンスにデプロイするために必要です。 -
ルートおよびコアモジュールの
pom.xmlファイルを更新して、system範囲とsystemPathがバンドルファイルを指す依存関係として OSGi バンドルを追加します。この手順は、プロジェクトをコンパイルするために必要です。
AEM プロジェクトへのサードパーティ jar のインストール
この例では、my-example-jar は OSGi バンドルではなく、Java jar ファイルです。
公開 Maven リポジトリでは入手できないデモ用の my-example-jar を AEM WKND プロジェクトにインストールおよび使用してみましょう。
my-example-jar は、Hello World! メッセージを返す sayHello() メソッドを持つ MyHelloWorldService クラスを含む Java jar ファイルです。
詳しくは、my-example-jar.zip ファイル内の README.md ファイルを参照してください。
all モジュールへの jar の追加
最初の手順では、my-example-jar を AEM WKND プロジェクトの all モジュールに追加します。
-
my-example-jar.zip ファイルをダウンロードして抽出します。
-
AEM WKND プロジェクトの
allモジュールで、all/resource/jarディレクトリ構造を作成します。 -
抽出した
targetディレクトリからmy-example-jar-1.0-SNAPSHOT.jarファイルを上記のall/resource/jarディレクトリにコピーします。
jar からのサービスの使用
AEM WKND プロジェクトの my-example-jar から MyHelloWorldService を使用しましょう。
-
AEM WKND プロジェクトの
coreモジュールで、core/src/main/java/com/adobe/aem/guides/wknd/core/servletにSayHello.javaSling サーブレットを作成します。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()); } } -
AEM WKND プロジェクトのルート
pom.xmlファイルに、依存関係としてmy-example-jarを追加します。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> ...この場合:
system範囲は、依存関係を公開 Maven リポジトリで検索しないことを示します。systemPathは、AEM WKND プロジェクトのallモジュール内のmy-example-jarファイルへのパスです。${maven.multiModuleProjectDirectory}は、マルチモジュールプロジェクトのルートディレクトリを指す Maven プロパティです。
-
AEM WKND プロジェクトの
coreモジュールのcore/pom.xmlファイルで、次の 2 つの変更を行います。-
my-example-jarを依存関係として追加します。code language-xml ... <!-- My Example JAR --> <dependency> <groupId>com.my.example</groupId> <artifactId>my-example-jar</artifactId> </dependency> ... -
bnd-maven-plugin設定を更新して、構築中の OSGi バンドル(aem-guides-wknd.core)にmy-example-jarを含めます。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> ...
-
-
次のコマンドを使用して、AEM WKND プロジェクトを構築およびデプロイします。
code language-none $ mvn clean install -PautoInstallPackage -
ブラウザーで URL
http://localhost:4502/bin/sayhelloにアクセスして、SayHelloサーブレットが期待どおりに動作することを確認します。 -
上記の変更を AEM WKND プロジェクトのリポジトリにコミットします。次に、Cloud Manager パイプラインを実行して、RDE または AEM 環境の変更を確認します。
AEM WKND プロジェクトの tutorial/install-3rd-party-jar 分岐には、参照用に上記の変更が含まれます。
Java jar ファイルが 公開 Maven リポジトリで使用可能であるが、OSGi バンドルではない シナリオでは、<dependency> の system 範囲と systemPath 要素が必須ではないことを除いて、上記の手順に従うことができます。
主な習得事項 key-learnings-jar
OSGi バンドルではなく、公開 Maven リポジトリで使用できる場合と使用できない場合の Java jar は、次の手順に従って AEM プロジェクトにインストールできます。
- コアモジュールの
pom.xmlファイル内のbnd-maven-plugin設定を更新して、構築中の OSGi バンドルにインラインリソースとして Java jar を含めます。
次の手順は、Java jar が公開 Maven リポジトリで使用できない場合にのみ必要です。
-
Java jar を
allモジュールのresource/jarディレクトリにコピーします。 -
ルートおよびコアモジュールの
pom.xmlファイルを更新して、system範囲とsystemPathが jar ファイルを指す依存関係として Java jar を追加します。
AEM プロジェクトへのサードパーティパッケージのインストール
メイン分岐からローカルに構築された ACS AEM Commons スナップショットバージョンをインストールしましょう。
これは、公開 Maven リポジトリでは使用できない AEM パッケージをインストールする手順を示す目的でのみ行います。
ACS AEM Commons パッケージは、公開 Maven リポジトリで入手できます。AEM プロジェクトに追加する方法について詳しくは、AEM Maven プロジェクトへの ACS AEM Commons の追加を参照してください。
all モジュールへのパッケージの追加
最初の手順では、パッケージを AEM WKND プロジェクトの all モジュールに追加します。
-
POM ファイルから ACS AEM Commons リリース依存関係をコメント化または削除します。依存関係を特定する方法について詳しくは、AEM Maven プロジェクトへの ACS AEM Commons の追加を参照してください。
-
ACS AEM Commons リポジトリの
master分岐をローカルマシンにクローン作成します。 -
次のコマンドを使用して、ACS AEM Commons スナップショットバージョンを構築します。
code language-none $mvn clean install -
ローカルに構築されたパッケージは
all/targetにあり、2 つの .zip ファイルがあります。-cloudで終了するファイルは AEM as a Cloud Service 用で、もう 1 つは AEM 6.X 用です。 -
AEM WKND プロジェクトの
allモジュールで、all/src/main/content/jcr_root/apps/wknd-vendor-packages/container/installディレクトリ構造を作成します。/all/src/main/contentディレクトリが存在するので、jcr_root/apps/wknd-vendor-packages/container/installディレクトリのみを作成する必要があります。 -
ローカルに構築されたパッケージ(.zip)ファイルを
/all/src/main/content/jcr_root/apps/mysite-vendor-packages/container/installディレクトリにコピーします。 -
次のコマンドを使用して、AEM WKND プロジェクトを構築およびデプロイします。
code language-none $ mvn clean install -PautoInstallPackage -
インストールされた ACS AEM Commons パッケージを確認します。
-
CRX パッケージマネージャー(
http://localhost:4502/crx/packmgr/index.jsp)
-
OSGi コンソール(
http://localhost:4502/system/console/bundles)
-
-
上記の変更を AEM WKND プロジェクトのリポジトリにコミットします。次に、Cloud Manager パイプラインを実行して、RDE または AEM 環境の変更を確認します。
主な習得事項 key-learnings-package
公開 Maven リポジトリで使用できない AEM パッケージは、次の手順に従って AEM プロジェクトにインストールできます。
- パッケージを
allモジュールのjcr_root/apps/<PROJECT-NAME>-vendor-packages/container/installディレクトリにコピーします。この手順は、パッケージをパッケージ化して AEM インスタンスにデプロイするのに必要です。
概要
このチュートリアルでは、AEM プロジェクトを構築およびデプロイする際に、公開 Maven リポジトリでは使用できないサードパーティアーティファクト(バンドル、Java jar およびパッケージ)をインストールする方法ついて説明しました。