web-dev-qa-db-ja.com

ビルド時間を1日1回から15分ごとに1回にするにはどうすればよいですか?

コンパイルしてエラーをチェックする必要があるJava/JSPファイルの大きなコードベースがあります。コンパイル時間は、1日に1回しか実行できないほど長いです。ただし、それよりも頻繁に、たとえば15分間隔で実行するようにしてください。

しかし、これを可能にするためにビルド時間を最小化する方法を理解することはできません。 ANTスクリプトを実行し、バージョンコントロールからすべてのファイルをダウンロードし、JSPをJAVAにコンパイルしてから、それらのJAVAをクラスファイルにコンパイルするには、1時間半かかります。

私の最初の解決策は、ダウンロード時間を短縮するために、コードベースのコピーをダウンロードし、15分ごとにサーバーから変更を同期(svn update)することでした。しかし、コンパイル時間を最小限に抑えることができませんでした。 Jasperを使用してJSPをコンパイルし、すべてのファイルを構築しています(Javaファイルに)には数分かかります。生成されたJavaファイルをコンパイルするにはさらに15分かかりますこれに取り組むために、「更新された」JSPファイルを個別にコンパイルし、それらをJavaソースにコピーして戻します。これは、JSP-> Javaステージを奪います。しかし、ANTとJasper個々のファイルをコンパイルし、新しいエラーが表示されないようにすることは簡単ではありません。

1日1回のビルドで解決すべきですか?または、ここで適用できるより良い解決策はありますか?

3
DemCodeLines

私は前の会社でこのようなことをしました。非常に大きなCアプリケーションがあり、完全なビルドを実行するには時間がかかりました。コンパイル時間は45分ですが、なんとか6未満に抑えることができました。

測定:

まず、あなたがしているように、プロセスの各部分を測定します。

  1. 15分チェックしてください。
  2. コンパイルJava分岐には20かかります
  3. JSPブランチのコンパイルには40

時間:75分

しかし、あなたはそれが1時間半かかるという質問で述べているので、15分が足りません、これはビルドプロセスはどこですか?

ANTスクリプトを実行し、バージョンコントロールからすべてのファイルをダウンロードし、JSPをJAVAにコンパイルしてから、それらのJAVAをクラスファイルにコンパイルするには、1時間半かかります。

したがって、最初に提案するコメントのように、チェックアウトではなくSVNの更新を行うことにより、ビルド時間が62分に短縮されます。 (平均6ビルド1日)

次に、ビルドスクリプトを見て、JavaコードまたはJSPを並行してビルドすることは可能ですか。レガシーコードであるため、複数のCPUでビルドするように指示されていない可能性があります。私たちのプロジェクトまだ1つのCPUに座っていましたが、ANTは並行してビルドする機能があるとおっしゃっています Parallel Tasks

すでにこれを行っている場合、それらをディスクに書き込むと問題が発生しますか?大量のオブジェクトを作成している場合、ディスクが帯域幅に達している可能性があるため、これをお願いします。ビルド用にSSDドライブを試してください。これは、実装するのに低コストのソリューションであるためです。

その他の考慮事項:変更に関する迅速なフィードバックが必要ですが、完全なフィードバックである必要がありますか?

  1. 一部のエラーのフィードバックを高速化するためにコードをリンティングします。
  2. ユニットテスト。
  3. 複数のマシンに負荷を分散するCIサーバー。

長期:

  1. コードを複数の部分に分割します。個別にコンパイルして後で組み込むことができるユーティリティはありますか?
  2. PMDは、重複したコードが使用されている場所を示します。レガシープロジェクトには通常、同じコードが多くの場所に含まれているこの問題があります。
2
JamesD

コードをより小さな(論理)部分にモジュール化することを検討します。つまり、ドメインオブジェクトやDAOなどのいくつかの一般的なモジュールがあり、次にサービスとビジネスロジックを持つ別のモジュールがあり、次に異なるビューを持ついくつかのモジュールがあるとします。各モジュールには、元のプロジェクトのコンパイル時間の一部が含まれます。

本当に時間がかかるのは本当にコンパイルだけですか、それともテストを実行していますか?テストも実行している場合は、単体テストが実際に単体テスト(データベース/外部接続なし)であることを確認し、統合/機能テストを別のビルドプロセスに移動して、実行頻度を減らすことを検討してください。

1
Maybe_Factor