2012-05-08 32 views
4

作爲Java新手,我無法理解從源代碼到硬件特定二進制文件的完整構建過程。基本上我使用Eclipse的Java和想知道所有的轉換髮生從源代碼(.java)到二進制,什麼所有的文件鏈接使用一些鏈接器,預處理器等等。Java應用程序的典型構建過程

如果你能點我給一些鏈接提供了完整的java構建過程的詳細信息。我已經搜索這個論壇,但沒有得到詳細信息。

感謝

編輯:

所以更準確地說,我尋找Java相當於以下的構建過程中的C: 我GOOGLE了很多,但沒有收穫!一個像下面這樣的圖不是必須的(雖然是首選),但是如果你可以編寫'n'順序/並行步驟參與完整的Java構建過程,那將會非常感激。儘管@Tom Anderson提供的大部分信息對我非常有用。

enter image description here

回答

7

首先要感謝的是,您的問題包含錯誤的假設。您詢問「從源代碼到硬件特定二進制文件的完整構建過程」 - 但是普通的Java構建過程從不會生成特定於架構的二進制文件。它獲得了獨立於體系結構的字節碼,然後停止。在大多數情況下,字節碼將被轉換爲本地代碼來執行,但是這一步發生在運行時,JVM內部,完全在內存中,並且不涉及二進制文件的生成 - 它是而不是構建過程的一部分。

也有例外 - 編譯器如GCJ可以生成本機二進制文件,但很少做到這一點。

因此,作爲構建過程的一部分發生的唯一重要步驟是編譯。編譯器讀入源代碼,執行通常的解析和解析步驟,併發出字節碼。這個過程沒有任何規定;像往常一樣,language specification定義了該語言的元素以及它們的含義,而不是如何編譯它們。在輸出格式中指定了什麼:字節碼以class files的形式打包,每個類別一個,爲了便於分配,這些字節碼又可以組合在jar files中。

當類文件被執行時,在執行之前需要進一步的步驟。這些在JVM規範中的loading, linking, and initializing一章中有詳細說明。但是,正如我所說,這些不是構建過程的真正組成部分。

有可能發生在構建過程,通常是編譯前幾個其他步驟:依賴關係可能被解析和下載,資源可能被複制和字符集之間轉換,並且可能會產生的代碼。但這些都不是標準的,這些都是通過各種構建工具添加到核心編譯過程中的東西。

3

有,如果你想知道發生了什麼事情「幕後」你可以檢出一些很酷的文章。

http://www.codeproject.com/Articles/30422/How-the-Java-Virtual-Machine-JVM-Works

這就是其中之一,它已就如何所有的部分進行交互來運行你的代碼,一個很好的解釋。

其主要思想是從Java文件創建字節碼以在虛擬機中運行,從而使您的Java代碼(或多或少)獨立於運行它的操作系統和平臺。

特定於該環境的JVM然後負責將該字節碼轉換爲您正在運行代碼的特定體系結構的實際指令。

這是「一次編寫,隨處運行」Java的基礎。雖然這個咒語並不總是成立......但總的來說它仍然是真實的。

+1

這條不包括從源代碼的步驟字節碼,這是提問者需要了解真的是。 –