OpenJDKメーリングリストでsjavac
と呼ばれるツールについて some buzz がありました。また、関連する2つのJEPがあります: JEP 139:javacを拡張してビルド速度を向上させる および JEP 199:スマートJavaコンパイル、フェーズ2 。
私の質問は:
sjavac
ツールとは正確には何ですか?免責事項:自己回答の質問。このツールの知識をStackOverflowコミュニティにもたらし、将来のsjavac FAQへの参照を作成したかっただけです。
正確にはsjavacツールとは何ですか?
sjavac
ツールは、Oracleで開発され、次の機能を提供することを目的とする、javac
のラッパー(またはsmart)のラッパーです。
ソースファイルのセットを再コンパイルするとき、javacは.Javaファイルと.classファイルのタイムスタンプを調べて、保持するものと再コンパイルするものを決定します。これは信じられないほど粗雑で、大規模なコードベースにとっては破壊的なものになる可能性があります。タイムスタンプに加えて、sjavacは依存関係のパブリックAPIを検査して、どのファイルを再コンパイルする必要があるかを判断します。
Sjavacは、コンパイルをjavacの複数の呼び出しに分割しようとします。つまり、ビルドプロセスに高度な並列処理をもたらします。
最後に、sjavacツールはクライアント部分とサーバー部分に分かれており、バックグラウンドでsjavacを実行したままにして、JIT処理して、連続した呼び出しで使用できるようにすることができます。
それは誰を対象としていますか?
大規模なプロジェクトに取り組んでおり、開発中にコードベースを頻繁に再コンパイルする人は、sjavac
を試すことをお勧めします。 (ただし、ツールは現在開発中であり、未解決の問題があることに注意してください。)
それをどのように使用しますか?
このツールはまだOpenJDKに同梱されていないため、 OpenJDK jdk9/devリポジトリ から入手する必要があります。また、ランチャーはまだ用意されていないため、Java com.Sun.tools.sjavac.Main
を使用して起動します。
ここでsjavacのjdk8バックポートを試すことができます: http://sjavac.s3-website-eu-west-1.amazonaws.com/