6.1 プラグインの概要

標準のライフサイクルは、Maven プラグインを使用して機能を強化できます。プラグインを使用すると、標準サイクルに新しいステップを挿入したり (アプリケーション サーバーへの配布など)、既存のステップを拡張したりできます。

Maven のプラグインは特別なものではなく、むしろ最も一般的で頻繁に遭遇するものです。結局のところ、プロジェクトの構築に微妙な違いを設定したい場合は、pom.xml で必要な情報を指定する必要があります。これを行う唯一の方法は、「プラグイン」を作成することです。

プラグインは依存関係と同じくらい成果物であるため、ほぼ同じ方法で説明されます。依存関係セクション - プラグインの代わりに、依存関係 - プラグインの代わりに、リポジトリ - pluginRepositories の代わりに、リポジトリ - pluginRepository。

例:

<plugins>
    <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-checkstyle-plugin</artifactId>
        <version>2.6</version>
    </plugin>
</plugins>

pom.xml でプラグインを宣言すると、プラグインのバージョンを修正したり、必要なパラメータを設定したり、さまざまな構成パラメータを定義したり、フェーズにバインドしたりすることができます。

言い換えれば、Maven はすべての作業を行う特定のプラグインを実行します。つまり、プロジェクトの特別なビルドについて Maven に教えたい場合は、必要なフェーズで必要なパラメーターを使用して目的のプラグインを起動するための指示を pom.xml に追加する必要があります

利用可能なプラグインの数は非常に多く、Maven から Web アプリケーションを直接実行してブラウザーでテストしたり、リソースを生成したりできるようにするさまざまなプラグインがあります。この状況における開発者の主なタスクは、最も適切なプラグインのセットを見つけて適用することです。

6.2 ライフサイクルとプラグイン

多くの場合、プラグインは、特定のフェーズの実行中にある種のコンソール ユーティリティを起動するために使用されます。さらに、通常の Java クラス (もちろん main メソッドがあります) を実行することもできます。

例:

<plugin>
  <groupId>org.codehaus.mojo</groupId>
  <artifactId>exec-maven-plugin</artifactId>
  <version>1.2.1</version>
  <executions>
    <execution>
      <goals>
        <goal>java</goal>
      </goals>
    </execution>
  </executions>
  <configuration>
    <mainClass>com.example.Main</mainClass>
    <arguments>
      <argument>first-argument</argument>
      <argument>second-argument</argument>
    </arguments>
  </configuration>
</plugin>

通常、プラグインは非常に柔軟に構成できます。Maven 開発者によるすべての公式プラグインは、Maven の公式 Web サイトに詳しく文書化されています。たとえば、 Apache Maven プロジェクト ページのmaven-compiler-pluginの場合、プラグインを制御するすべての変数のリストを確認できます。プラグインに関する情報はリンクから入手できます

さらに重要な情報。ライフサイクルのさまざまな段階で、Maven によってさまざまなプラグインが呼び出されます。たとえば、Swing Java デスクトップ アプリケーションを記述するプロジェクトには、Web アプリケーションの開発 (戦争) で一般的なライフ サイクル ステージとは異なるライフ サイクル ステージがあります。

または、たとえば、コマンド「mvn test」が実行されると、プロジェクトのライフサイクルの一連のステップ全体が開始されます。「process-resources」、「compile」、「process-classes」、「process-test」 -resources”、”test-compile”、テスト。Maven によって表示されるメッセージでこれらのフェーズについての言及を確認できます。

[INFO] Scanning for projects...
[INFO]
[INFO] --- maven-resources-plugin:2.6:resources (default-resources)     @ codegym ---
[INFO] --- maven-compiler-plugin:3.1:compile (default-compile)      @ codegym
[INFO] --- maven-resources-plugin:2.6:testResources         (default-testResources) @ codegym ---
[INFO] --- maven-compiler-plugin:3.1:testCompile (default-testCompile)          @ codegym ---
[INFO] --- maven-surefire-plugin:2.12.4:test (default-test)         @ codegym ---
[INFO] Surefire report directory:           t:\ projects\codegym\target\surefire-reports

6.3 Maven の目標 - 目標

Maven には、ゴール (goal) というものもあります。目標は、Maven のスタートアップ ターゲットのようなものです。主な目標は主なフェーズと一致します。

  • 検証;
  • コンパイル;
  • テスト;
  • パッケージ;
  • 確認;
  • インストール;
  • 配備。

プロジェクトのライフサイクルの各フェーズで、特定のプラグイン (jar ライブラリ) が呼び出されます。これには、いくつかの目標 (ゴール) が含まれます。

たとえば、「maven-compiler-plugin」プラグインには、プロジェクトのメイン ソース コードをコンパイルするための Compiler:compile と、テストをコンパイルするための Compiler:testCompile という 2 つのターゲットが含まれています。形式的には、フェーズのリストを変更できますが、これが必要になることはほとんどありません。

特定のフェーズで非標準のアクションを実行する必要がある場合は、適切なプラグインを pom.xml に追加するだけです。

<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>Name-plugin</artifactId>
  <executions>
    <execution>
      <id>customTask</id>
      <phase>generate-sources</phase>
      <goals>
        <goal>pluginGoal</goal>
      </goals>
    </execution>
  </executions>
</plugin>

この場合最も重要なことは、プラグインの「実行/フェーズ」フェーズの名前を定義することです。このフェーズには、プラグインのゴール「ゴール」への呼び出しを埋め込む必要があります。たとえば、xml に基づいて Java コードを生成する必要があります。次に、「ソースの生成」フェーズが必要になります。これはコンパイル フェーズの呼び出しの前に配置され、プロジェクトのソースの一部を生成するのに最適です。