このフォーラムでの苦情のいくつかに対抗したいと思います。
Mavenはオール・オア・ナッシングです。または、少なくともドキュメントからわかる範囲で。Mavenをantのドロップイン代替として簡単に使用することはできず、徐々により高度な機能を採用することができます。
これは真実ではありません。Mavenの大きな勝利は、それを使用して依存関係を合理的な方法で管理することです。Mavenでそれを行い、それ以外のすべてをAntで実行したい場合は、それが可能です。方法は次のとおりです。
<?xml version="1.0" encoding="UTF-8"?>
<project name="foo" basedir="." xmlns:maven="antlib:org.apache.maven.artifact.ant" >
<maven:dependencies verbose="true" pathId="maven.classpath">
<maven:pom id="maven.pom" file="pom.xml" />
</maven:dependencies>
</project>
これで、pomファイルで定義されたすべてのmaven依存関係を含む「maven.classpath」という名前のクラスパスオブジェクトができました。必要なのは、maven antタスクjarをantのlibディレクトリに配置することだけです。
Mavenは、ビルドプロセスをネットワーク接続に依存させます。
デフォルトの依存関係とプラグインのフェッチプロセスは、ネットワーク接続に依存します。ただし、初期ビルド(または使用中の依存関係やプラグインを変更した場合)のみです。その後、すべてのjarファイルがローカルにキャッシュされます。また、ネットワーク接続を強制したい場合は、Mavenにオフラインモードを使用するように指示できます。
それは最初からあなたに堅い構造を課します。
これがファイル形式に関するものなのか、それとも「慣習対構成」に関する問題なのかは不明です。後者の場合、Javaソースファイルとリソースの予想される場所、またはソースの互換性など、目に見えない多くのデフォルトがあります。ただし、これは厳密ではありません。適切なデフォルトが設定されているため、明示的に定義する必要はありません。すべての設定はかなり簡単に上書きできます(ただし、初心者にとっては、ドキュメントで特定の変更方法を見つけるのは難しい場合があります)。
ファイル形式について話している場合、それは次のパートへの応答でカバーされています...
これはXMLベースであるため、ANTと同じように読むのは困難です。
まず、私があなたが何かが「アリよりも良くない」のいくつかの側面が悪い担当者を持っていることの正当化として不平を言うことができる方法を見ません。第二に、それでもXMLですが、XMLのフォーマットははるかに定義されています。さらに、そのように定義されているため、POM用の分厚いクライアントエディターを作成するのははるかに簡単です。あちこち飛び回る長いアリビルドスクリプトのページを見たことがあります。antビルドスクリプトエディターは、これを口当たりの良いものにするつもりはありません。わずかに異なる方法で提示された相互接続されたタスクの別の長いリストです。
ここで私が見たいくつかの不満があるか、またはある不満があると言いましたが、最大のものは
- ドキュメントが不十分/不足している
- 再現可能なビルド
- Eclipseの統合が悪い
- バグ
私の回答は2つあります。まず、MavenはAntまたはMakeよりもはるかに新しいツールであるため、これらのアプリケーションの成熟度レベルに到達するには時間がかかると予想する必要があります。2つ目は、それが気に入らない場合は修正することです。オープンソースプロジェクトであり、それを使用してから、だれでも解決できる何かについて不平を言うのは、私にはかなりおかしいようです。ドキュメントが気に入らない?初心者がより明確に、より完全に、またはよりアクセシブルになるように貢献してください。
再現可能なビルドの問題は、バージョン範囲とMavenプラグインの自動更新という2つの問題に分類されます。プラグインの更新については、1年後にプロジェクトを再構築するときに、まったく同じJDKとまったく同じAntバージョンを使用していることを確認しない限り、これは名前が異なるだけの同じ問題です。バージョンの範囲については、すべての直接および推移的な依存関係に対してロックされたバージョンの一時的なpomを作成し、それをMavenリリースライフサイクルの一部にするプラグインで作業することをお勧めします。これにより、リリースビルドpomは常にすべての依存関係の正確な説明になります。