# プロジェクト項目をフィルタリング

Talend CI Builderでは、POMをさらに速く生成できるよう、生成するプロジェクト項目をフィルタリングして指定できます。

POMファイルの生成時に使用できる主なフィルターパラメーターは次のとおりです。

* -DitemFilter
* -DprojectFilter
* -Dfilter.include.dependencies=true
* -Dtalend.child.lifecycle.skip=true

情報メモ注: -DitemFilter は常に -DprojectFilter と一緒に使用することをお勧めします。

-DitemFilterパラメーターが使われない場合は、POM ファイルを生成する必要があるプロジェクトの選択に -DprojectFilter パラメーターが使われます。-DitemFilterパラメーターが使われる場合は、その-DitemFilterパラメーターが適用される必要があるプロジェクトの選択に-DprojectFilterパラメーターが使われます。ただし、-DprojectFilter値に記述されていないプロジェクトのPOMファイルは、フィルターが適用されずに生成されます。

## 手順

1. Gitプロジェクトをチェックアウトします。

   Gitプロジェクトをチェックアウトする方法の詳細は、[Gitチェックアウト](https://www.atlassian.com/git/tutorials/using-branches/git-checkout)をご覧ください。
2. mvn org.talend.ci:builder-maven-plugin:8.0.X:generateAllPomsコマンドを実行します。
   * -DitemFilterパラメーターを使ってプロジェクト項目をフィルタリングします。

     ジョブタイプをフィルタリングする例:

     * -DprojectFilter="main" -DitemFilter="(type=process)": すべての標準ジョブをフィルタリング
     * -DprojectFilter="main" -DitemFilter="(type=process\_mr)": すべてのビッグデータMap/ReduceおよびSparkバッチジョブをフィルタリング
     * -DprojectFilter="main" -DitemFilter="(type=process\_storm)": すべてのBig Data StormおよびSparkストリーミング ジョブをフィルタリング
     * -DprojectFilter="main" -DitemFilter="(type=route)": すべてのルートをフィルタリング

     ジョブラベルをフィルタリングする例:

     * -DprojectFilter="main" -DitemFilter="(type=process)and(label=jobA)": jobAという名前のジョブをフィルタリング
     * -DprojectFilter="main" -DitemFilter="(type=process)and(label%job\*)": jobという名前で始まるジョブをフィルタリング

     ジョブパスのをフィルタリングする例:

     * -DprojectFilter="main" -DitemFilter="(type=process)and(path=Integration)": Integrationサブフォルダー内にあるジョブをフィルタリング
     * -DprojectFilter="main" -DitemFilter="(type=process)and(path%Integration\*)": Integrationで始まる名前のサブフォルダーにあるジョブをフィルタリング

     ジョブ バージョンでのフィルタリング例:

     * -DprojectFilter="main" -DitemFilter="(type=process)and(version=lastVersion)": ジョブの最新バージョンでフィルタリング

     また、Talend Studio の [[プロジェクト設定](https://help.qlik.com/talend/r/ja-JP/8.0/studio-user-guide/removing-old-versions-of-project-items)] で、古いバージョンのプロジェクト項目を削除することもできます。

     ジョブの作成者をフィルタリングする例:

     -DprojectFilter="main" -DitemFilter="(type=process)and(author=doc@talend.com)": doc@talend.comという作成者IDのジョブをフィルタリング

     除外フィルターの例:

     * -DprojectFilter="main" -DitemFilter="(!path=sandbox)and(type=process)and(label%jobA\*)or(label%jobB\*)": jobAまたはjobBという名前で始まるが、sandboxフォルダーにないジョブをフィルタリング
     * -DprojectFilter="main" -DitemFilter="(!path%MainProcess/Import\*)and(type=process)and(label%job\*)": jobという名前で始まるが、MainProcessフォルダーのImportという名前で始まるサブフォルダーにないジョブをフィルタリング
     * -DprojectFilter="main" -DitemFilter="(type=process)and(!label=job2)and(path%MainProcess/Export\*)": MainProcess フォルダーのExportという名前で始まるサブフォルダーにあるジョブ(job2というジョブを除く)をフィルタリング

   * 追加の -Dfilter.include.dependencies=true パラメーターを使用すると、フィルタリングされたプロジェクト項目の依存項目がすべて含まれ、POM がさらに速く生成されます。

     メインプロジェクトが1つの場合の例:

     -DprojectFilter="main" -DitemFilter="my\_parent\_jobs" -Dfilter.include.dependencies=true: 記述されている親ジョブ、それに関連する全サブジョブとジョブレットのPOMファイルが生成されます。

     (参照プロジェクトも含め) プロジェクトが複数ある場合:

     -DprojectFilter="mainA|mainB" -DitemFilter="my\_parent\_job\_in\_mainA\_or\_main\_B" -Dfilter.include.dependencies=true: -DprojectFilterパラメーター値で記述されているプロジェクトの親ジョブ、それに関連する全サブジョブとジョブレットのPOMファイルが生成されます。すなわち:

     * mainAプロジェクトにも存在するparentJobAとそのサブジョブおよびジョブレット
     * mainBプロジェクトにも存在するparentJobBとそのサブジョブおよびジョブレット
     * mainAにrefA1とrefA2という参照プロジェクトがあり、mainBにrefB1とrefB2という参照プロジェクトがあれば、refA1、refA2、refB1、refB1というプロジェクトの項目がすべて生成されます。

     -DprojectFilterで記述されているプロジェクトの参照プロジェクトは、フィルターが適用されることなく完全に生成されます。

   * プロジェクトアイテムの子ジョブを除外するには、追加の-Dtalend.child.lifecycle.skip=trueパラメーターを使用します。この設定をtrueにすると、-DitemFilterパラメーターで指定されたジョブのみがデプロイされます。これにより、POM生成後にMavenの-pl (project list)および-am (also make)パラメーターを指定する必要がなくなります。

     例:

     -DprojectFilter="main" -DitemFilter="(type=process)and(label=jobB)" -Dtalend.child.lifecycle.skip=true: 子ジョブを除外しながら、jobBという名前の特定のジョブのみをフィルタリングできます。

     -Dtalend.child.lifecycle.skipパラメーターを使用しない場合(またはfalseに設定した場合)、POM生成時のフィルタリング(-DitemFilter を使用)だけでは、デプロイメントを親ジョブのみに限定できない可能性があります。代わりに、Mavenは参照されているすべてのサブジョブまたはジョブレットを含めようとします。

     POM を生成した後、フィルタリングされた親ジョブのみをデプロイするには、Mavenの-plパラメーターを使用して正確なモジュール/アーティファクトを指定し、依存関係もビルドする場合は-amパラメーターを使用します。

     例:

     ```
     # Generate filtered POMs
     mvn org.talend.ci:builder-maven-plugin:8.0.X:generateAllPoms 
     -DprojectFilter="main" 
     -DitemFilter="(type=process)and(label=myParentJob)"
     -Dtalend.child.lifecycle.skip=false

     # Deploy only the filtered parent job
     mvn deploy -fn -pl "myParentJob" -am 
     -DaltDeploymentRepository=tac::default::http://10.70.25.99:8082/repository/releases/
     ```

     -Dtalend.child.lifecycle.skip=trueを使用した場合、-plと-amを指定する必要はありません。フィルタリングされたジョブのみがデプロイされます。

   情報メモ重要: -DprojectFilterパラメーター値には参照プロジェクトの名前を入力しないでください。入力してしまうと-DitemFilterパラメーターがこの特定の参照プロジェクトに適用されるため、参照プロジェクトで必要なジョブをすべて生成できるように-DitemFilterパラメーター値に条件を追加する必要があります。