Maven 3.7.0には、システム間のポータブルビルドを簡素化するために設計された新しいWrapperが含まれる予定である。これは、Mavenの通常の依存関係の解決を超え、Maven自体の正しいバージョンの解決を含むことで、ほとんどのシステムは事前構成する必要がなくなる。その結果、開発者はサードパーティのソフトウェアプロジェクトをより簡単にコンパイルでき、組織は継続的統合 (CI) により汎用ビルドノードをスケーリングできる。
Javaエコシステムの大部分は、Mavenを主要な2つの部分に使用している。Mavenはソフトウェアをコンパイルするためのビルドシステムであり、Maven Centralはライブラリのパブリックリポジトリであり、Mavenビルドシステムが必要なファイルを取得できるようにする。Mavenビルドシステムがないと、プロジェクトに取り組みたい開発者は、プロジェクトごとに固有のビルドシステムやセットアップを習得するために時間を費やさなければならず、そのため、開発者がしようとした作業から時間を費やさなければならなくなる。代わりに、Mavenはすべてのプロジェクトに共通の構造を共有することを目指す。Mavenのpom.xmlファイルのカスタマイズの欠如について不満を言う人もいるが、開発者は1つのことを学び、同じ不満とスキルセットの追加の努力なしに他のプロジェクトに適用できる。ビルドフェーズ全体でアクティビティをカスタマイズできる多くのMavenプラグインも利用できる。WrapperのインスピレーションはGradleに由来し、Wrapperプロジェクトはそのインスピレーションを強調している。
これまでのMavenはユーザにとって非常に安定しており、ほとんどのシステムで利用可能であるか、簡単に入手できます。しかし、Mavenの最近の変更の多くにより、プロジェクトによって提供される完全にカプセル化されたビルドセットアップをユーザが簡単に利用できるようになります。Gradleから借りた素晴らしいアイデアである、Maven Wrapperを使用すると、これは非常に簡単に実行できます。
- Takari氏
すべてのMavenプロジェクトは、同様のフォルダ構造とレイアウトに従う:
- pom.xmlは、プロジェクトがMavenに基づいていることを示し、プロジェクトの構築方法、プロジェクト間の関係、および依存関係に関するインストラクションが含まれている。
- src/main/java はカスタムコードの初期のフォルダである。
- src/main/resources はドキュメントや構成などのファイルの場所である。
- src/main/java9 および同様の番号のフォルダは、前方互換性に取り組んでいるライブラリなど、マルチリリースのJARファイルを示す。これらのフォルダはあまり一般的ではなく、JREバージョンを指定できるアプリケーションではなく、主にライブラリーに使用される。
- src/test/java は、ユニットテストの場所であり、プロジェクトが正しいかの大部分を検証するコードである。
- targetは、コンパイルされたクラスファイルおよびその他のアーティファクトの出力先である。
最終的にMavenは、ソフトウェアのコンパイルをいくつかの必要なフェーズに分割することで機能する。主要な要素は次のとおりである:
- 誰かがビルドシステムを構成して、JDKとMavenの両方をインストールします。
- ビルドシステムは、ライフサイクルでソフトウェアをコンパイルする単一のジョブを起動する:
- Clean: 古いアーティファクトをすべてクリーンアップし、以前のビルドからの副作用がないことを確認する。
- Compile: ソフトウェアプロジェクトを構築
- Package: コンパイルされたプロジェクトをデプロイ可能なアーティファクトに変換
- デプロイまたはカスタム実行フェーズ
- コンパイルされたコードまたはアプリケーションは、適切なエリアに送られて配布される。
MavenビルドWrapperは、手順1で重要な改善を行い、システムにMavenをあらかじめ用意して構成されている必要がなくなる。一部の開発システムにはメリットがあるが、組み込みのMavenとMavenプロジェクトの完全なネイティブサポートがすでに同梱されているApache NetBeansなどの主要な統合開発環境 (IDE)では、Wrapperは必要ない。