JavaCC を使用して一部の Java 5 クラスを自動生成し、すべてのクラスをコンパイルして単体テストを実行するのに、開発者のマシンで約 12 分かかる大規模なコードベースがあります。
このプロジェクトは、グループでビルドできる複数のプロジェクトで構成されていますが、10 分以内に完全にビルドすることを目指しています。
このビルド時間を短縮するためのヒントは何ですか?
ありがとう
少し時間がかかる可能性のある簡単な修正の1つは、サーバーJVMを使用してAntを実行していることを確認することです(デフォルトではクライアントVMを使用します)。「-server」を含めるようにANT_OPTSを設定します。
ビルド時間を短縮するためのヒント:
仕事を減らす。 たとえば、ファイルやコンソールへの不要なロギング/エコーを削除します
ビルドを「インクリメンタル」にします。コンパイルはクラスを変更するだけです。
重複した作業を排除します。 言うは易く行うは難しですが、ビルドをデバッグ モード ("ant -debug") で実行すると、冗長なタスクやターゲットが表示されることがあります。
高価な操作を避ける。 リリースには、ファイルのコピーと jar の war へのパッケージ化が必要です。
プロセスをより詳細に説明したので、次に2つのオプションがあります。
ビルドが通常のワークステーションよりもはるかに高速に実行される専用のマシン/クラスター。次に、開発者は、コミットする前に、専用のマシン/クラスターでコードをビルドするスクリプトを実行します。
パーティションをサブプロジェクトに変更して、別のプロジェクトを変更して1つのプロジェクトを壊しにくくします。これにより、すべてのコミットの前にフルビルドを実行することの重要性が低くなります。機密性の高いサブプロジェクトに影響を与えるコミット、または複数のプロジェクトにまたがるコミットのみを、フルビルドで「チェック」する必要があります。
実用的なプログラマーに触発されてみてください。必要なものだけをコンパイルし、2 つ以上のテスト スイートを用意します。1 つはクイック テスト用、もう 1 つは完全なテスト用です。毎回各ビルドステップを使用する必要があるかどうかを検討してください。javac の代わりに jikes コンパイラを使用する必要があります。プロジェクトが数百のクラスにまたがった後、速度を向上させるために jike に切り替えます。ただし、潜在的な非互換性の問題に注意してください。プロジェクトの完全な再構築と完全なテストですべてのステップを実行するために、すべてを 1 つのターゲットに含めることを忘れないでください。
これはおそらく短期的には役に立たないでしょうが、とにかくそこに捨てるべきだと考えました.
プロジェクトが小さなプロジェクト (データベース サブシステム、ロギングなど) に分割できる場合、maven のようなものを使用してビルドを処理することに関心があるかもしれません。それぞれの小さなバイトを個別のプロジェクトまたはモジュールとして実行でき、変更が存在する場合、maven はビルドする必要があるものを維持できます。これにより、ビルドはプロジェクトの主要部分に集中でき、それほど時間はかかりません。
ビルド全体が 10 分未満であることは非常に重要ですか? サブプロジェクトを互いに独立させると、他のサブプロジェクトを既にコンパイルしている間に、1 つのサブプロジェクトで作業できます (依存関係を管理するために Maven または Ivy を考えてください)。
もう 1 つの解決策 (モジュールがかなり安定している場合) は、サブプロジェクトをスタンドアロン プロジェクトとして扱うことです。その後、各プロジェクトは独自のリリース サイクルに従い、ローカルの Maven/Ivy リポジトリから利用できるようになります。もちろん、プロジェクトの少なくとも一部が適度に安定している場合、これはうまく機能します。
費やされた時間の内訳は次のとおりです。
プロジェクトによっては、より大きなヒープ サイズを javac(memoryMaximumSize) と junit(maxmemory) に割り当てることで、ビルド時間が大幅に増加する場合があります。