Javac多模块化编译
轉載:原文鏈接
從SDK9開始,Java支持多模塊編譯。那么,怎么用javac實現多模塊編譯呢?
項目介紹
先來看看我們的項目。
首先lib文件夾下是依賴模塊,有一個hello模塊。hello模塊包含hello包,并且被導出。
然后是test,是我們的主模塊,包含一個test包,里面有個叫Main的主類。
有源碼的編譯
首先,我們模擬,我們具有這兩個類的源碼時的編譯。
編譯命令:
javac -d .\target\build1 --module-source-path ".;.\lib" .\test\module-info.java .\test\test\Main.java
首先,-d是輸出路徑。--module-source-path是模塊源碼的保存路徑。在這些路徑下,直接保存這些模塊的源碼。文件名就是模塊名(即使模塊名包含".",文件名也是包含"."的模塊名,而不是多級目錄),這些文件名下直接就有module-info.java文件。.路徑指當前路徑,也就是test包的位置,.\lib則是hello包的路徑。
通過class文件編譯
有時候,我們沒有Hello包的源碼,那么怎么辦呢?
先模擬這個環境,編譯hello包:
javac -d .\target\build2 --module-source-path ".;.\lib" .\lib\hello\module-info.java .\lib\hello\hello\Hello.java
此時,hello包將編譯在.\target\build2\hello位置,那么.\target\build2就是包存放的位置了。
javac -d .\target\build2 --module-source-path "." -p ".\target\build2" .\test\module-info.java .\test\test\Main.java
然后編譯test,此時使用-p來指示模塊的位置。
通過jar文件編譯
jar文件編譯和class文件編譯其實很類似,我們來試一下。
首先把hello2編譯成jar。
mkdir target/build3jar -cvf .\target\build3\hello.jar -C .\target\build2\hello .
然后編譯
javac -d .\target\build3 --module-source-path "." -p ".\target\build3" .\test\module-info.java .\test\test\Main.java
結果非常符合預期。
寫在最后
通過上面的操作,我們就能自己編譯我們的java多模塊工程了。當然,借助maven等工具能實現更高效的開發。
總結
以上是生活随笔為你收集整理的Javac多模块化编译的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 记一次卡顿的性能优化经历实操
- 下一篇: 直接在*.vue文件(SFC)中使用JS