編譯器與 module-source-path


你也許會想問,先前曾經談過使用 javac 編譯時,可以 -sourcepath 指定原始碼路徑,那麼在編譯模組時有類似的引數嗎?因為也許你拿到了其他模組的原始碼(而不是編譯或進一步封裝好的模組),想要自行編譯出 .class 檔案。

在使用 javac 時,確實是有個 --module-source-path 可以指定模組的原始碼路徑,以〈編譯器與 module-path〉中 的範例來說,若不想分別對 cc.openhome.utilcc.openhome 模組分別進行編譯,那麼只要如下指定 --module-source-path 就可以了:

編譯器與 module-source-path

使用 --module-source-path 指定模組的原始碼路徑時,由於原始碼可能是來自於多個模組,因此搭配的 -d 引數在指定路徑時,只需要指定頂層資料夾,編譯器會自行建立起對應於模組名稱的資料夾。

實際上,在能夠運用 --module-path--module-source-path 引數之後,搭配 -d 引數時,本來就只需指定頂層資料夾,〈JVM 與 module-path〉、〈編譯器與 module-path〉只是個循序漸進的過程,讓你逐步瞭解 --module-path--module-source-path 的作用,也就是說,如下編譯 cc.openhome.utilcc.openhome 模組就可以了:

編譯器與 module-source-path

簡單來說,可以暫時將 --module-path--module-source-path 想像成 -classpath-sourcepath 的對應物,這樣在指定引數就容易記憶且不會產生混淆了。

如果這些對模組的基本認識還不過癮,可以看看〈Project Jigsaw: Module System Quick-Start Guide〉以及〈The State of the Module System〉。