web-dev-qa-db-ja.com

Eclipseが既にあるのに、なぜMavenまたはAntが必要なのですか?

この質問は Javaの場合はIDEと比較してください、まだAntが必要ですか?

上記の質問には回答がありますが、EclipseだけでMavenまたはAntを使用する具体的な例を知りたいと思います。

Eclipseで開発すると、Eclipseがすべてを処理してくれるので、実行ボタンをクリックするだけです。また、Eclipseでは、コードを実行可能なjarまたはWindows用の.exeにエクスポートすることもできます。

ですから、なぜMavenやAntが必要なのか本当にわかりません。

また、必要な場合は、MavenまたはAntのどちらを選択する必要がありますか?

70
Jackson Tale
  1. 同僚がNetBeansまたはIDEAを好む可能性があるため
  2. Eclipseのインストールごとに設定が異なる場合があるため
  3. 依存関係を自動的に取得したい場合があるため
  4. ビルド、jar、静的コード分析の適用、単体テストの実行、ドキュメントの生成、ディレクトリへのコピー、環境に応じたプロパティの調整など、完全なビルドを自動化したいためです。
  5. 一度自動化されると、変更のたびにまたは1時間ごとにアプリケーションをビルドする継続的インテグレーションシステムを使用して、すべてがビルドされ、テストが合格することを確認できるためです...
  6. Mavenは設定よりも規約を使用しているためです。
  7. あなたのIDEはあなたが必要とするいくつかの派手なコード生成/変換をサポートしないかもしれないので。
  8. ビルドスクリプトはビルドプロセスを文書化するためです。

Eclipseは開発環境です。しかし、それはビルドツールではありません。

私は個人的にMavenは嫌いですが、YMMVは嫌いです。多くの選択肢があります:gradle、buildrなど。

85
JB Nizet

Mavenは、autoconfがEdgeコードの自動化をリードしていると考え、オブジェクトコードrequireオブジェクト環境は、開発または展開のいずれかの方法で何らかの形で効率的です。 Antは十分に悪いものでしたが、MavenはAntとIvyの最悪の機能をすべて組み合わせています。オブジェクト環境を作成するわけではなく、作成するツールとうまく連携しません。

簡単に言えば、オブジェクト環境にはすべてのクラスオブジェクト、つまり、システムで使用可能なオブジェクトの種類を決定し、ライブで常に使用可能なオブジェクトが必要です。そこから、私は何でもできます。クラスの複数のオブジェクトをインスタンス化し、さまざまなシーケンスとインスタンス化ルールなどをセットアップします。環境は完全にライブである必要があるので、ビルドツールをneed 。アプリをデプロイするという点では、環境がアプリを構成する名前空間のコードによって参照されないすべてのクラスオブジェクトを単純に破棄することは難しくありません。 JVMのガベージコレクターは、今日とほぼ同じことをその場で行います。その時点で、オブジェクトと、オブジェクトが参照するすべてのオブジェクト(主にクラスオブジェクト)、つまりアプリケーションとすべての依存関係で構成されるデプロイメント環境ができました。これが仮想マシンの仕組みです。 (VMの記述が不十分であるため、LinuxのVM JavaでSpring VMを実行する必要がありますVM VMWareでVM別のLinux上のVMは、ソフトウェア開発の愚かさの別の例です)。依存関係が更新されると、開発者に古いコードを新しいライブラリにマージするか、新しいライブラリを使用してコードを古いバージョンにマージするか、両方のバージョンを保持するかを環境が簡単に指示できます。プロンプトは、開発者がすべてのライブラリの20バージョンを回避するために時々必要なわずかな変更を行うことを奨励しますが、Mavenなどのツールは、20バージョンがあるという事実を隠し、Javaで一般的な大規模なランタイム膨張をもたらしますアプリ。

Java開発スペースでは、Eclipseは適切なオブジェクト環境に最も近くなりますが、さまざまな方法でパラダイムを破る多くのプラグインが認められています。 Mavenを使用する理由のほとんどは、批判的に検討するとばらばらになります。

NetbeansとIdeaはオブジェクト環境ではなく誇張されたテキストエディターですが、Eclipseプロジェクトをインポートして維持できる数千のEclipseプラグインでカバーされていないものにツールを使用したい場合、開発者に比べてビルドが非常に遅くなりますEclipseを使用しますが、純粋なNetbeansまたはIdeaプロジェクトである場合、とにかく遅くなります。

Mavenを使用する重大な理由ではありません。

Eclipseでの設定のエクスポート/インポートの容易さ(すべてのチームがIDEで行うべきこと)により、異なる設定の問題は、開発チームの怠(またはスペース対タブ、笑)。

繰り返しますが、Mavenを使用する重大な理由ではありません。

チーム環境? GITやSVNのようなリポジトリをまだ使用していないチームを見せてください。 Nexusリポジトリも設定して、機能とメンテナンスの頭痛の両方を再現する必要があるのはなぜですか?

それが実際にMavenを使用する正当な理由[〜#〜] not [〜#〜]です。

サーバービルドを実行していますか? Nexusにプッシュされる偶然のビルドではなく、ソースリポジトリに実際にチェックインされるコードによって開始されるべきではないでしょうか。これは、Git、特にGit with Mavenに対してポイントをもたらします。 Gitではブランチで作業せず、ローカルでテストしてからコミットするため(JenkinsとEclipseのMaven構成の違いによりサーバービルドが動作することを私のローカルテストが証明していないため)、変更をコミットする必要がありますサーバーMavenビルドが失敗することを確認するために別のブランチを作成し、さらに変更をコミットして問題を修正します。その結果、リポジトリに読み取り不能なソース履歴が生じます。チェックインされたコードは、少なくとも単体テストをビルドしてパスする必要があります。GitとMavenが見えない場合は、それを保証する必要があります。

実際に見てみると、Eclipseからヘッドレスビルドをエクスポートするのは簡単です。必要なのは、antまたはGradle、Eclipseによって既に維持されている開発者ビルド、およびいくつかのEclipse jarです(Eclipseは、ヘッドレスビルドに必要なすべてのファイルを、ディレクトリまたはZipファイル、またはビルドサーバーにFTPで転送します)。 Hudson/Jenkinsなどのサーバービルドツールは、ほとんどのソースリポジトリから更新されたコードをプルし、ビルドスクリプトを呼び出すことができます。Mavenに依存しません。 Mavenを使用すると、開発者にビルドエンジニア以外の誰にも適さないツールを使用するよう強制するか(M2Eを使用する場合でも、ビルドにかかる時間で十分です)、サーバーをビルドする可能性がありますワークステーションビルドのようにかなりは動作しません。これは、大量のM2Eプラグインを使用して2つの統合のすべての面倒を経験する場合はstill trueです。どちらの方法でも、同様に低速で脆弱なサーバービルドのために、低速で脆弱なワークステーションビルドを取得します。私が取り組んだすべてのMavenベースのプロジェクトで、絶対にevery可能なM2Eプラグインをインストールして正しく構成し、ほとんどの開発者が決してしない限り、Eclipseに表示されない一時的なHudson/Jenkinsエラーを見ました行う。

Mavenを避けるもう一つの大きな理由のようです。

Java名前空間やXML名前空間を壊す名前空間、実際のデプロイメント環境では何も関係のないビルドユニット(POM)など、Mavenの基本的な問題の一部はカバーしませんそれについて、完成品で実際に達成していることをPOMで分離する場合、何もありません。それは、すべてのrunが1つとして懸念と機能を異なるビルドユニットに分離したという誤った感覚ですモノリシックコード);複雑な構成ファイルを手動で保守する手間。これは、OSGiまたは別のコンテナーを使用する必要があり、Maven構成に影響を及ぼし、Maven構成に影響を受ける他の構成ファイルを保守する必要がある場合にのみ悪化します;コードを実行するための完全な環境なしで単体テストを実行しようとすると発生する問題。依存関係だけでなく、Maven固有のプラグインの無数のバージョン(複数のMavenプラグインが競合する依存関係を使用しているMavenビルド自体でJAR hellを実際に見ました-Mavenが解決する

はい、Mavenでオブジェクトコードをcanビルドします。 canもCまたはアセンブラーで純粋なオブジェクトコードを記述しますが、なぜそうするのかわかりません。

Mavenを回避する最良の理由は、上記のすべての問題(および言及されていない他の多くの問題)にうんざりした場合に、一連のプロジェクトのde-mavenizeに必要な驚異的な作業量です。

C開発から継承された開発サイクルは、コードの記述、コンパイル、アセンブル、ビルド、デプロイ、テスト、やり直しで構成されるという考え方は、オブジェクト環境では絶望的に古くなっています。ある時点で、この考え方を持つすべての人々に、期間の開発方法を再学習する必要があることを伝える必要があります。そうすることで、Maven、Git、および時間を無駄にするだけのその他のツールのホストが不要になります。

オブジェクト開発は、変更されたオブジェクトがライブであるため、コードの変更が保存されるときにテストされるライブオブジェクト環境で実行する必要があります。展開は、その環境から開発のみのアーティファクトを削除し、実行中のアプリが開発およびテストで使用するすべてのものを含むランタイムを作成することで構成する必要があります。

現在、maven-Assemblyプラグインを使用してOSGiアプリのデプロイメントアセンブリを作成することによって引き起こされる問題を扱っています。アプリはEclipse環境で完全に機能し、すべてのコード変更を環境内で実行中のOSGiコンテナーにホットデプロイします。ただし、maven-Assemblyプロセスでは、そのプロセスを達成することが唯一の仕事である非常に優れた構成/ビルドエンジニアがいますが、構成はそのまま残りません。 Mavenを取り除き(コードの量が原因で非常に困難ですが、可能です)、BNDTOOLS Eclipseプラグインを使用すると、EclipseビルドをAntまたはGradleヘッドレスビルドとして簡単にエクスポートできます(注、BNDを記述するOSGi開発者BNDTOOLS do n'tはMavenをサポートします。正当な理由により、Mavenプラグインは、NetbeansとMavenを使用するFelix開発者によって作成され、デプロイサイクルの終了時以外にライブ環境はありません。どちらのツールも、開発者専用のGUIオブジェクトなしで、Eclipseとして同じ環境をセットアップします。結果は、展開のための同一の構成とビルドになります。これにより、開発者が現在遅いMavenまたはM2Eビルドの監視に費やしている1日あたり2〜3時間を簡単に節約でき、構成/ビルドエンジニアを解放して展開ホストでアプリのテストを行うことができます。

Write/compile/assemble/build/deploy/testの考え方を乗り越えることが唯一の大きな障害です。最新のマシンではなく1979年のVT100端末でコーディングしているふりをしても、あなたが「本当の」開発者になるわけではなく、メソッドが35年古いことを示しています。

チームの開発者のうち、Eclipseのようなライブオブジェクト環境をM2EおよびOSGiでライブ環境として機能させるために十分に理解している開発者はいません。彼らはトップの開発者であり、時代遅れのコマンドライン開発ツールの普及に。彼らは、構成問題を解決するためにペアプログラミングを行っていて、画面を共有しているときに可能であることに気づき、他のチームメンバーの1人に「that's how私のコードの変更がバックグラウンドOSGiコンテナーで即座にテストされるのを見たとき、彼はコードをとても速く書いています」リモートサーバー上のログを表示するときなど、必要なときにbashシェルを使用できます。実際、可能な限り迅速にその環境から抜け出し、21番に戻ることができるように、かなり効率的に正確に実行します。世紀。

12
Das Richardson

AntまたはMavenを使用することには、多くの利点があります。

Mavenは多かれ少なかれAntの更新コンセプトです。箇条書きの答えを提供する代わりに、この質問に答えるために別のアプローチを取ることにしました。簡単な質問をします。ここでは、あなたが開発者になると仮定しています。または、OOプログラミングの背景。

したがって、マネージャーが200個のディレクトリをコピーするように求めたが、jar, war and earこれらのディレクトリ内のファイルと一度コピーされます。次に、これらの200個のディレクトリを別の宛先にデプロイしますが、.classファイル;残りのファイルを別の宛先などにコピーします。

Javaでこれを行うには。それは多くのロジック、多くのコードであり、拡張性や変更への適応性はありません。そのため、AntまたはMavenは、アプリケーションが使用するオーバーヘッドを削減して、これらすべてをオンザフライで実行および準備します。 antまたはMavenのコードのサイズは1/4 Javaと比較してください。

技術的な利点については、リンクをクリックしてください。

Maven

Ant メリットのある本物の答えは見つかりませんでしたが、これはあなたを納得させると確信しています;)

6
Simple-Solution

MavenとAntは、ビルドをスクリプト化するために使用され、Jenkinsなどのバッチジョブまたはコマンドラインで実行できるようになります。

実際、Eclipse自体はAntを広範囲に使用してプラグインをビルドします。

この2つのうちの1つを学び、Mavenを学ぶとしたら、それはほとんどすべての人が最近使用しているものです(Antを置き換える)。

5
Francis Upton

Mavenは通常、特定のアプリケーションのプラグインまたはjarを構築するために使用されます。

アプリケーションを開発したが、そのアプリケーションに必要なjarを手動で追加したくないと仮定します。この状況では、MavenまたはAntが非常に役立ちます。 Run As-> Maven Build(Maven Buildをクリック)にコードを記述したら、必要なすべてのプラグインまたはjarを生成し、アプリケーションライブラリのbuild-pathに含めます。アプリケーションがこれらのjarを取得する方法のように疑問が生じる場合があります。アプリケーションごとに、POM.xmlという名前のxmlファイルがあり、ダウンロード目的ですべてのjarの参照がそこに保持されます。

2
Amlan Mohanty