Mavenは理論上および実際に何をしますか?いつ使用する価値がありますか?[閉まっている]


156

練習のためだけにJavaプロジェクトを開始しようとしています。私はMavenについて読みましたが、それがいつ使用されるつもりなのか実際にはわかりません。

実用的なヒントを教えていただけますか?Mavenは大いに役立ちますか?Mavenはプロジェクトで実際に何をしますか?


Hej、Maven、Spring、Rooに関する私の質問を見てください。私はEclipseで作業するとき、および開発時間を短縮するためにMavenをよく使用しました。しかし、いくつかの問題があります。MavenとともにJavaアノテーションシステムを理解する必要があると思います。しかし、..私はリンク質問を見て
mm24

@ArtBは、Mavenが何であるかをよく説明しています。しかし、私は彼の答えに対する私のコメントで述べているように、あなたはそれを使うべきではないと思います。ビルドツールが必要な場合は、Gradleを使用してください。それをダウンロードしてインストールしてから、プロジェクト内にというbuild.gradle1行だけを含むというファイルを作成しますapply plugin: 'java'。ソースコードが通常の場所(src/main/java、の単体テストsrc/test/java)にあると仮定すると、と言ってコードをビルド、テスト、およびパッケージ化できますgradle build。かんたん!
トムアンダーソン

2
Gradleのを使用するには、Groovyのを学ぶ必要があるでしょうし、あなたは間違いだろう、それはまだ価値がある学習ですので、Mavenを使用してプロジェクトに遭遇します。また、Mavenを理解することで、他のツールを理解しやすくなります。
そり

MavenとJavaアノテーションとの関係は何ですか?
そり

1
だけでなく、それが身近にJava開発者のためにあるのGradleのための1、、それはMavenの成果物を再利用することができ、それは非標準を簡単に構築することができますstackoverflow.com/questions/1163173/...
Kalpesh曽爾

回答:


183

それがすること

Mavenは「ビルド管理ツール」です。これは、.javaファイルのコンパイル方法、ファイルへの.classパッケージ化.jar(または.waror .ear)ファイル、(事前/事後)ツールでの処理、の管理、CLASSPATHその他に必要なすべての種類のタスクを定義するためのものですプロジェクトをビルドします。これは、C / C ++のApache AntまたはGradleまたはMakefileに似ていますが、必要なライブラリのダウンロードやインストールなどの他の一般的なタスクを組み込むことにより、追加のツールやスクリプトを必要としないように完全に自己完結しようとします。

また、「ビルドの移植性」をテーマに設計されているため、同じビルドスクリプトの同じコードが別のコンピューターでは機能しないという問題が発生しません(これは既知の問題であり、WindowsのVMがあります) Delphiアプリケーションの一部を他の場所でコンパイルできないため、98台のマシン。このため、IDEで生成されたAntスクリプトを他のIDEにインポートするのは難しいため、異なるIDEを使用する人々の間でプロジェクトに取り組む最善の方法でもありますが、現在、すべてのIDEがMaven(IntelliJEclipse、およびNetBeans)を理解およびサポートしています)。Mavenが気に入らなくても、他のすべての最新ビルドツールの参照ポイントになります。

なぜそれを使うべきか

あるMavenの約3つのものがありとても素敵で。

  1. Mavenは意志(あなたが使用しているものを宣言した後)は、すべてのあなたが使用することをライブラリダウンロードしていることをライブラリが、彼らは自動的に使用します。これは非常に便利で、多くのライブラリを驚くほど簡単に扱うことができます。これにより、「依存関係の地獄」を回避できます。Apache AntのIvyに似ています。

  2. Convention over Configuration」を使用するため、デフォルトでは、実行するタスクを定義する必要はありません。AntやMakefileで行う必要があるように、「コンパイル」、「テスト」、「パッケージ」、または「クリーン」のステップを記述する必要はありません。Mavenが期待する場所にファイルを置くだけで、バットから動作するはずです。

  3. Mavenには、JAXB使用したXSDスキーマからのJavaクラスの生成からCoberturaでのテストカバレッジの測定まで、多くのルーチンタスクを処理する、インストール可能な素晴らしいプラグインがたくさんあります。それらをあなたに追加するだけで、pom.xmlあなたがしたい他のすべてと統合されます。

初期の学習曲線は急ですが、(ほぼ)すべてのプロのJava開発者がMavenを使用しているか、それを望んでいます。すべてのプロジェクトでMavenを使用する必要がありますが、慣れるまでに時間がかかり、新しいことを学ぶのが面倒な場合があるので、手動で操作したいと思っても驚くことはありません。ただし、Mavenに慣れると、ビルド管理にほとんど時間がかからないことがわかります。

始め方

開始するのに最適な場所は、「Maven in 5 Minutes」です。これにより、必要なすべてのファイルとフォルダーをセットアップしてコード化する準備ができたプロジェクトから始めることができます(そうです、少なくとも最初は、クイックスタートアーキタイプを使用することをお勧めします)。

使い始めたら、ツールの使用方法について理解を深める必要があります。そのため、「Better Builds with Maven」はそれがどのように機能するかについての根本を理解するための最も完全な場所ですが、「Maven:The Complete Reference」はより最新のものです。最初の1つを読んで理解し、2つ目を参考にしてください。


12
Mavenを使用していないプロのJava開発者は数多く存在し、使用しないことをうれしく思います。これらのいくつかは単純にその複雑さと柔軟性を拒否し、Antなどに固執しますが、GradleやBuildrなどのMavenの後継者に移行した人が増えています。これらの後継者は、Mavenから強力なビルドステップのセットをそのまま提供するという考えを継承しますが、カスタムステップを追加することも非常に簡単にします。彼らの存在を考えると、正直に言って、Mavenを新しいプロジェクトに使用する理由はないと思います。
トムアンダーソン

5
答えをどの程度詳細に入力するかという問題は常に存在しますが、平均的なJava開発者であれば、オフィスではMavenまたは下品なAnt hell(Ant + bash + perl +魔法のパスで構成されたコンピューターを構築する)の可能性があります。あなたが自由に選択できる良い環境でA +開発者と仕事をしている幸運な数少ない人の1人なら、他のオプションがあります(Gradleは1つです)。しかし、平均的な場所で作業している場合、Mavenは同僚が先のとがったもので自分自身をカットすることができない最高のツールです。
そり

4
Gradleを使用するためにA +開発者である必要はないと思います。Mavenを採用できる組織がGradleを採用できない理由がわかりません。Gradleを使用すると、Antと同じように足を自分で撃つことができますが、Mavenがかなり困難な方法で(そして、それを証明するために同僚のショットフィートのコレクションを持っています)、これは、Mavenが実質的に不可能にすることを可能にするためのトレードオフです。
トムアンダーソン

4
Gradleのようなものを使用し、ショットフィートを回避するという観点から、プログラマーのトリアージ分類を提案します。一部のプログラマーは、ビルドスクリプトを編集することをためらわず、多かれ少なかれ正しいものにするでしょう。それらの人々は役に立ちます。一部のプログラマーは、ビルドスクリプトを恐れて、それらに触れません。それらの人々は少なくとも害はありません。私は12人のチームで、たった2人でビルドに触れましたが、実際にはかなりうまくいきました。一部のプログラマーはビルドスクリプトを恐れていませんが、触れた場合、それらを台無しにします。それらの人々は危険です。
トムアンダーソン

1
Javaのnpmのようなものです
KJW 2013年

9

Sonatype docから:

この質問への答えはあなた自身の視点に依存します。Mavenユーザーの大多数は、Mavenを「ビルドツール」と呼びます。これは、ソースコードからデプロイ可能なアーティファクトをビルドするために使用されるツールです。ビルドエンジニアとプロジェクトマネージャーは、Mavenをより包括的なもの、プロジェクト管理ツールと呼ぶかもしれません。違いはなんですか?Antなどのビルドツールは、前処理、コンパイル、パッケージ化、テスト、および配布にのみ焦点を当てています。Mavenなどのプロジェクト管理ツールは、ビルドツールにある機能のスーパーセットを提供します。ビルド機能を提供することに加えて、Mavenはレポートを実行し、Webサイトを生成し、作業チームのメンバー間のコミュニケーションを促進することもできます。

Sonatypeのドキュメントを確認し、Mavenのパワーを理解するために利用可能なプラグインを確認することを強くお勧めします。

非常に簡単に言うと、(たとえば)Antよりも高い概念レベルで動作します。Antを使用して、ビルドするファイルとリソースのセットを指定し、それらをまとめてjar化する方法を指定し、(clean / compile / jar)で発生する順序を指定します。Mavenでは、これはすべて暗黙的です。Mavenは特定の場所でファイルを見つけることを期待しており、自動的にそれで動作します。したがって、Mavenを使用したプロジェクトの設定ははるかに簡単ですが、Mavenのルールに従う必要があります。


私はそれに反対票を投じなかったが、おそらく反対投票者はソナタイプの宣伝からのあなたの引用をMavenの全体主義的な「プロジェクト管理ツール」哲学の暗黙の裏付けとして読んだのだろう。
トムアンダーソン

1
私はあなたがOPの質問に答えたとは思わないが、代わりにマーケティングの熱意を投稿しただけである...そして、その熱意は、「プロジェクト管理」がMavenが提供するものよりもはるかに多く、助けよりも混乱させるので、非常に多く、私見では。
そり

2
@ブライアン申し訳ありませんが、私の以前のコメントが不自然に聞こえますが、言い換えさせてください。あなたのコメントは、Mavenが何であるをすでに理解している場合にのみMavenを説明するものだと感じますが、最初の出発点としては役に立ちません。
そり

5

Mavenビルドツールです。一緒にAnt、またはGradleあるJava建物のためのツール。
あなたがJavaの初心者なら、IDEを使ってビルドするだけMavenです。


NetBeansでのMavenのIDEサポートは非​​常に優れているため、学習曲線はほとんど存在しません。
キャプテンキリン
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.