最初に認識すべきことは、質問に誤った仮定が含まれていることです。「ソース コードからハードウェア固有のバイナリまでの完全なビルド プロセス」について質問されますが、通常の Java ビルド プロセスではアーキテクチャ固有のバイナリが生成されることはありません。アーキテクチャに依存しないバイトコードまで到達し、その後停止します。ほとんどの場合、そのバイトコードはネイティブ コードに変換されて実行されることは確かですが、そのステップは実行時に JVM 内で完全にメモリ内で行われ、バイナリ ファイルの生成は含まれません。ビルドプロセス。
これには例外があります。GCJなどのコンパイラはネイティブ バイナリを生成できますが、それが行われることはめったにありません。
そのため、ビルド プロセスの一部として発生する重要なステップはコンパイルだけです。コンパイラはソース コードを読み取り、通常の解析と解決の手順を実行して、バイトコードを出力します。そのプロセスは決して指定されていません。いつものように、言語仕様は言語の要素が何であるか、およびそれらが何を意味するかを定義しますが、それらをコンパイルする方法は定義しません。出力の形式で指定されているもの: バイトコードはクラス ファイルの形式でパッケージ化され、クラスごとに 1 つです。これらは、配布を容易にするためにjar ファイルにグループ化できます。
クラスファイルが実行されるようになると、実行が可能になる前に必要な追加の手順があります。これらは、JVM 仕様でのロード、リンク、および初期化に関する章で非常に明確に指定されています。しかし、私が言ったように、これらは実際にはビルド プロセスの一部ではありません。
ビルド プロセスでは、通常はコンパイルの前に、依存関係の解決とダウンロード、リソースのコピーと文字セット間の変換、およびコードの生成など、いくつかのステップが発生する可能性があります。しかし、これはどれも標準的なものではなく、さまざまなビルド ツールによってコンパイルのコア プロセスに追加されるすべてのものです。