プログラミングの年数Java=そして最近ではScalaで、Ant、Maven、Gradle、またはこれらのJava用ビルドツールのいずれも使用したことがありません。すべてを処理しました-IDEを使用して開発とユニットテストを行うためにローカルでコンパイルします。次に、ソースコードをチェックインし、ビルドマネージャーに通知します。共有環境用のファイル。
契約の合間に、自分の自己資金プロジェクトに取り組んできましたが、実際にお金を稼ぐのに十分なレベルに到達できるようになりました。私は潜在的な投資家も並んでおり、数週間以内にベータ版を表示する予定です。
しかし、ずっとIDEのビルドボタンをクリックするだけで、Jarファイルが作成され、問題なく動作します。もちろん、従来の知識では、私は自分のAnt/Maven/Gradleスクリプトを「すべき」であり、IDEの代わりにそれを使用するべきだと示唆していますが、私の状況(単独で作業)での具体的な利点は何ですか?
これらのビルドツールの使用方法についていくつか読みましたが、IDEに何をするために何百行ものXML(またはGroovyなど)を記述しているように見えますワンクリックで実行します(プロジェクト用にIDEで生成されたAnt XMLは700行を超えます)。エラーが発生しやすく、時間がかかり、私の状況では不必要に見えます。学習曲線は言うまでもありません。人々に見せるために製品を準備するために私が行っている他の作業。
AntではなくMavenの使用を検討することをお勧めします。 IDEがワンクリックでプロジェクトをビルドできる場合、Mavenはカスタム構成なしでプロジェクトをビルドできる可能性があります。
そして、質問に答えるために、導入プロセスを簡素化することは、1つの具体的な例です。配布可能ファイルをローカルで構築している場合は、配布可能ファイルを運用システムに手動で展開する必要があり、展開の準備を整えるために運用システムでかなりの手動構成を行う必要があったことを意味します(Tomcatのインストール) 、おそらく、またはアプリケーションに必要な依存関係とリソースをコピーします)。これには時間がかかる場合があり、更新の展開が面倒な手動プロセスになる可能性があります。また、本番プラットフォームと開発環境の間の小さな構成の違いが原因で、エラーの追跡が不明瞭で困難になる可能性もあります。
したがって、とにかく、この手間のかかる煩わしさを取り除くために行うのは、プロジェクトをMavenでビルドするように構成し、_pom.xml
_ファイルに必要なすべての情報を構成することです(Java web-app)正しいバージョンのTomcatを見つけてダウンロードし、ローカルにインストールして、正しいTomcat構成ファイルを設定し、プロジェクトの依存関係とプロジェクトWARファイル自体をデプロイしてから、Tomcatを起動します。次に、Mavenを使用してサーバーを構築および起動する単純なシェルスクリプト(およびWindowsの_.bat
_バージョン)を作成します。
_mvn clean install cargo:start -Dcargo.maven.wait=true
_
したがって、開発環境にデプロイ可能なパッケージをパッケージ化して手動で本番環境にプッシュする代わりに、バージョン管理システムから本番サーバーに同期するだけで、本番システム自体がビルド、インストール、実行されます。デプロイ可能(そして、どの開発システムでもそれが同一のように行われ、プラットフォーム固有のエラーや設定ミスの可能性を最小限に抑えます)。また、開発環境でも運用環境でも、サーバーを構築して起動するために私が行うことはすべて次のとおりです。
_./startServer.sh #or startServer.bat for Windows
_
また、更新を本番環境にデプロイするプロセスは次のとおりです。
svn update -r<target_release_revision>
_を実行します。./startServer.sh
_を実行します。シンプルで覚えやすく、IDEを使用してデプロイ可能なものを構築することに頼っていたとしても、まったく不可能です。また、ロールバックが必要になった場合に、最新の既知の適切なデプロイメントに簡単に戻すことができます。
このアプローチによって、展開と構成のプロセスを手動で管理するよりも時間を節約することすらできません。
そしてもちろん、あなたの質問に対する別の答えは自動依存関係管理ですが、私はそれが他の答えですでにカバーされていると私は信じています。
コードがソース管理されている限り、IDEを使用して配布物を作成することは問題ありません。
一人の店として、あなたの時間はあなたの製品に新しい機能を追加したり、ビルドスクリプトを書いたりすることに費やしたほうがいいですか?何かがビルドスクリプトを記述していないことを教えてくれます。
確かに、あなたが一人で作業しているときの利点を見ることはより困難です。個人的には、多くのソロプロジェクトに取り組んできましたが、ビルドスクリプトを作成するだけでなく、CIサーバー(Jenkinsなど)のセットアップの問題も経験しました。
もちろんオーバーヘッドがありますが、なぜそれに値するのでしょうか?
私の現在のプロジェクトでは、スクリプトがビルドし、静的分析ツールを実行し、js/css、ユニットテスト、およびパッケージをWebアーカイブに圧縮します。 Jenkinsはコミットのたびに実行し、プロジェクトをテストサーバーにデプロイします。
私はこれをセットアップするのに時間をかけました(ビルドスクリプトはたぶんちなみに300行ですが、数か月は触れていません)。1人でも、価値があると言えます。複数の人にとって、それは必要です。ビルド/デプロイメントプロセスへの私の関与は、コマンド「hg commit」と「hg Push」で構成されています。
これは氷山の一角を示した短い要約であり、多くのプロジェクト、大規模プロジェクト、中規模から大規模のチームの組み合わせで行う必要がない限り、これらすべての重要性に必ずしも気付かないでしょう。しかし、あなたが信仰を持ち、試してみれば、メリットを享受できます。
開発ライフサイクルを促進し、次のことを可能にします。
Javaの世界で Maven を使用している人)は、これを読むことにより、各ポイントを次のように自然に関連付けます。
そしてもちろん、Maven(他のツールも同様)は依存関係管理を提供し、それは巨大な時間とスペースセーバー(チームの人数に応じて計算)とSCM。
すべての相対:
Mavenを例として使用しています。これは、最も包括的で「バッテリーを含む」ビルドシステムだと思いますが、必ずしも「最高」であるとは限りません。ただし、上記のすべてのチェックボックスには適合します。優れたビルドシステムを探すときは、このリストおよびMavenと比較します。ただし、Mavenは常に非常に柔軟であるとは限りません。ただし、標準化されたプロセスから逸脱した場合、非常に拡張可能です。それはあなたがそれと戦うのではなく、一般的なケースで(学習曲線の前に)あなたの生産性を高めます。
ビルドツールを使用する理由のトップ4は次のとおりです。
本 Pragmatic Programmer の中で、Andrew HuntとDavid Thomasは、「checkout-build-test-deploy」は単一のコマンドである必要があると述べています(章:Pragmatic Projects)。あなたが書いた..
潜在的な投資家も並んでおり、数週間以内にベータ版を表示する予定です
その後、私はあなたのチームが成長するだろうと確信しています。自動テスト展開機能を実行させることはさらに重要です。
見た大きなXML(スクリプト)は、通常、1回限りの作業です。ほとんどの場合、同じスクリプトを多くのプロジェクトで使用できます。
プロジェクトの規模は明確ではありません。統合されたテスト/受け入れテストに大きなCPU /メモリが必要な場合は、別のマシンをテストサーバーとして使用することを検討してください。 ソースコード/バイトコードを分析するツールのホストを配備する もできます。
一人の開発者にとって、スクリプトビルドのような優れたプロセスと構造を持つことは、チームにいるときよりもはるかに重要であると私は主張します。理由は、チームメイトが手を抜いたときに声をかける必要がないためです。ビルドスクリプトを実行するCIサーバーは、妥協のない優れたチームメイトが正直でいられるようにします。
コードベースが大きくなるにつれて、テストスイートを追加する必要があります。私の経験では、これは後ではなく早く行う必要があり、毎晩(または何でも)ビルドはすべてのテストを毎回実行する必要があります。小さなものから始めれば、自動生成されたXMLはおそらく問題ありません。何かを壊すことを恐れて何かを変更するのが怖い場合は、いくつかのテストケースを作成することをお勧めします。
非IDEビルドでは、IDE当時の方法を再構成することを心配することなく、古いバージョンを簡単に再ビルドできます。これにより、非対話的にビルドを実行できるため、夜間のビルドを維持できます。人々がテストするために、またはテストを実行し、完了するのを待つことを忘れずにテストを破ったかどうかをすばやく知ることができます。
また、サーバーへのSSHなど、非GUI環境でビルドを実行でき、ソフトウェアのビルド機能を失う心配をせずにIDEを切り替えることができます。
一部のビルドツールは、リリースのタグ付けと展開を自動化するのに役立ち、コードカバレッジレポートを生成するための適切なデフォルトが付属しています。
さらに人を追加すると、ビルドツールは他の人の貧弱な脆弱性に対して脆弱でないことを確認しますIDE=ビルドを使用しないため、同僚のEclipseインストールを修正するために定期的に画面共有を行っていますツール(その上で作業)。
ただし、最終的には手動で行う必要がないため手動で行わないでください。それ以外はすべて抜け落ちます。