モジュール間の依存関係¶
概要¶
本章ではモジュール間の依存関係の概念について説明します。
依存関係とは¶
依存関係の定義はモジュール間の関係性を示します。依存関係はモジュールごとに定義を行います。定義されたモジュールは、定義したモジュールを含むwarを作成する際に必須のモジュールとなります。ex. サンプルモジュールのmodule.xml<?xml version="1.0" encoding="UTF-8"?> <module conf:schemaLocation="urn:intramart:jackling:toolkit:configurations configurations.xsd" xmlns="urn:intramart:jackling:module" xmlns:conf="urn:intramart:jackling:toolkit:configurations" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemeLocation="urn:intramart:jackling:module module.xsd"> <id>jp.co.sample.sample_module</id> <version>1.0.0</version> <type>module</type> <name>サンプルモジュール</name> <vendor>サンプル会社</vendor> <description>サンプルモジュールです</description> <dependencies> <dependency> <module-id>jp.co.intra_mart.im_workflow</module-id> <verified-version min="8.0.5" max="8.0.7">8.0.5</verified-version> </dependency> </dependencies> </module>例として上記のmodule.xmlで設定されている依存関係の例を見てみます。これは「サンプルモジュール」と名付けられたモジュールのmodule.xmlです。サンプルモジュールは依存関係として、IM-Workflow モジュール(jp.co.intra_mart.im_workflow)を定義しています。これはサンプルモジュールを同梱した環境をwarで作る際に、必ずIM-Workflowモジュールもwarで含まれるように設定しないといけないことになります。実際にIM-Jugglingでwarを作成する際に依存関係に含まれているモジュールが含まれないと依存関係の対象モジュール、およびそのモジュールに依存関係で紐づくモジュールが足りないことをエラーで表示します。選択するモジュールが定義している依存モジュール、および依存関係で紐づくモジュールの一覧は「モジュールプロパティビュー」にて確認することができます。
依存関係の設定の必要性¶
開発者は自身が作成したモジュールがどのモジュールに依存しているかを定義すべきです。もし、intra-mart Accel Platformのバージョンアップに伴って対応を行う時に、依存関係を記述しておくことによって、調査すべき変更内容と自らのモジュールに対する影響の調査範囲を絞り込むことができます。また、定義しておくことによって、ユーザモジュールを含んだ環境を作成する際に必要なモジュールがぬけていたといったような設定漏れを防ぐことができます。
依存関係の定義方法¶
モジュールプロジェクトでは、プロジェクト直下にあるmodule.xmlで依存関係を示します。module.xml内の<dependencies>の子要素である<dependency>に依存関係あるモジュールの情報を記述します。<?xml version="1.0" encoding="UTF-8"?> <module conf:schemaLocation="urn:intramart:jackling:toolkit:configurations configurations.xsd" xmlns="urn:intramart:jackling:module" xmlns:conf="urn:intramart:jackling:toolkit:configurations" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemeLocation="urn:intramart:jackling:module module.xsd"> <id>jp.co.sample.sample_module</id> <version>1.0.0</version> <type>module</type> <name>サンプルモジュール</name> <vendor>サンプル会社</vendor> <description>サンプルモジュールです</description> <dependencies> <dependency> <module-id>jp.co.intra_mart.im_workflow</module-id> <verified-version min="8.0.5" max="8.0.7">8.0.5</verified-version> </dependency> </dependencies> </module>module.xmlにおける<dependency>の各要素の定義は以下のようになります。
要素名 説明 module-id 依存関係に設定するモジュールのIDです。モジュールのIDは以下で確認することができます。・「モジュールプロパティビュー」に表示されるプロパティ「ID」の値・IM-Jugglingの「 モジュール構成Excel出力 」で出力したExcelファイルverified-version 依存関係に設定するモジュールのバージョンです。値にバージョンを指定することにより、依存関係に設定したモジュールのバージョンを指定できます。範囲指定の属性として「min」属性と「max」属性を指定できます。minは依存するモジュールの最小バージョンを、maxは依存するモジュールの最大バージョンを指定できます。min、maxを指定することによって、そのモジュールに依存するバージョンの範囲を指定することができます。min、maxをいずれも指定しなかった場合は、値に指定したバージョン以上となります。なお、minのみ設定した場合は設定したバージョンより大きいバージョンのいずれか、maxのみ指定した場合は設定したバージョンより小さいバージョンのいずれかという範囲になります。また、minにバージョンを指定する場合は、上記の例のように、この要素の値にはminに指定したバージョンと同じものを指定してください。コラム
「モジュール構成Excel出力」は以下のように行います。
- juggling.imをエディタで開きます。
- エディタ右上のアイコンでビルドウィザードを起動します。
- Jugglingビルドウィザードで、「モジュール構成Excel出力」を選択して、「次へ」をクリックします。
- 出力場所などを設定して、「次へ」をクリックします。
- 内容を確認して、「終了」をクリックします。
- モジュール構成情報のExcelファイルが出力されます。
依存関係に設定するモジュールの選別¶
本項では、開発者が作成するモジュールに対して、何を基準にして依存関係のモジュールを設定すべきかについて例をあげます。
利用している開発フレームワークモジュール
開発者がユーザモジュールを開発する際に利用する開発フレームワークのモジュールです。開発フレームワークモジュールとは、 IM-Jugglingにおいて、juggling.im ファイルを「IM-Juggling Editor」で開いたときにベースモジュールの開発フレームワーク内にて選択できるモジュール群です。開発者は開発フレームワークの依存関係を指定してあげることで、開発フレームワークモジュール、もしくは開発フレームワークが依存するサードパーティライブラリの漏れを防ぐことができます。利用しているAPI、もしくは機能を含んでいるモジュール
例えば開発者が、IMBoxのAPIを利用して、特定のアクションが発生した際にIMBoxに投稿するような機能をユーザモジュールに含む場合、依存関係にIMBoxのモジュールを含める必要があります。さらにこのIMBox投稿機能をジョブスケジューラにて定期実行を行いたいとした場合、IMBoxのモジュールだけでなくジョブスケジューラのモジュールを依存関係に含める必要があります。カスタマイズするソースを含んでいるモジュール
intra-mart Accel Platformにて提供されているソースのカスタマイズを行いたい場合、カスタマイズ元のソースを提供しているモジュールを依存関係に含みます。カスタマイズしたいソースがどのモジュールに含まれているかはIM-Jugglingの「 モジュール構成Excel出力 」で出力したExcelファイルにて確認することができます。もし、Excel上に複数存在していた場合、シート番号がより大きいモジュールを依存関係として設定してください。カスタマイズしているモジュールの依存関係を正しく設定してあげることにより、展開時にカスタマイズしたソースが反映されるようになります。注意
同一のパッケージ名とクラス名でのカスタマイズしたJavaソースの作成は非推奨です。上記のようなクラスを作成した場合、 jar に含んだ場合は正常にカスタマイズソースが呼び出されない可能性があります。そのため、カスタマイズしたJavaソースに対して、お客様独自で配置したソースかどうかが分かるよう、明確な違いが分かるパッケージ名、およびクラス名でのカスタマイズを行ってください。