建立zoo.animal.care模組
接下來我們要建立zoo.animal.care模組,該模組有2個套件:
- 套件zoo.animal.care.medical包含開放給其他模組使用的類別和方法。
- 套件zoo.animal.care.details只供模組自己使用,不對外開放,可以視為動物的醫療隱私。
下圖顯示該模組的內容。記得所有模組都必須有1個模組資訊文件!
和建立模組zoo.animal.feeding的處理方式一樣:
- 使用Eclipse建立專案zoo.animal.care。
- 建立2個套件。
- 每個套件下建立各自類別。
- 建立模組資訊檔案module-info.java。
模組的2個類別如下,因為只是要驗證模組對存取控制的效果,基本上都沒有甚麼內容:
- package zoo.animal.care.details;
- import zoo.animal.feeding.Task;
- public class HippoBirthday {
- private Task task;
- }
這次module-info.java比較特別:
- package zoo.animal.care.medical;
- public class Diet {
- }
- module zoo.animal.care {
- exports zoo.animal.care.medical;
- requires zoo.animal.feeding;
- }
編譯和打包zoo.animal.care模組
建立模組後,讀者可以發現某些*.java檔案在Eclipse內將編譯失敗,這是因為我們只使用Eclipse建立模組專案,但並未設定Eclipse專案間的相依關係,後續會再說明。而且目前編譯使用javac的指令進行,是否編譯失敗以管理者視窗的輸出結果為主。仿照前之前的方式開啟以模組專案zoo.animal.care的根目錄為預設路徑的管理者視窗,執行以下指令進行編譯:
編譯模組過程未出現錯誤訊息:
- javac
- --module-path mods
- -d src
- src/zoo/animal/care/details/*.java src/zoo/animal/care/medical/*.java src/module-info.java
- jar
- -cvf mods/zoo.animal.care.jar
- -C src/ .
更新(refresh)專案後,可以看到src目錄下出現*.class檔案,而且mods目錄內有zoo.animal.care.jar檔案:
建立、編譯、打包zoo.animal.talks模組
接下來的模組相依情形會愈來愈明顯。
由圖7-1我們知道zoo.animal.talks模組相依於zoo.animal.feeding模組和 zoo.animal.care模組,這也表示著module-info.java檔案中必須有2個requires 關鍵字。模組zoo.animal.talks的內容可以參考圖7-2,這裡就不在重複。此外模組zoo.animal.talks具備的3個套件將全部開放。以下列舉各套件的各類別內容:
1. 套件zoo.animal.talks.content的類別ElephantScript內容如下:
2. 套件zoo.animal.talks.content的類別SeaLionScript內容如下:
- package zoo.animal.talks.content;
- public class ElephantScript {
- }
3. 套件zoo.animal.talks.media的類別Announcement 內容如下:
- package zoo.animal.talks.content;
- public class SeaLionScript {
- }
4. 套件zoo.animal.talks.media的類別Signage 內容如下:
- package zoo.animal.talks.media;
- public class Announcement {
- public static void main(String[] args) {
- System.out.println("We will be having talks");
- }
- }
- package zoo.animal.talks.media;
- public class Signage {
- }
5. 套件zoo.animal.talks.schedule的類別Weekday 內容如下:
6. 套件zoo.animal.talks.schedule的類別Weekend 內容如下:
- package zoo.animal.talks.schedule;
- public class Weekday {
- }
7. 最後,模組資訊檔module-info.java內容如下:
- package zoo.animal.talks.schedule;
- public class Weekend {
- }
- module zoo.animal.talks {
- exports zoo.animal.talks.content;
- exports zoo.animal.talks.media;
- exports zoo.animal.talks.schedule;
- requires zoo.animal.feeding;
- requires zoo.animal.care;
- }
另外和前模組一樣,我們也在與src目錄的同一檔案階層建立了一個名為mods的目錄,然後將前2個專案打包好的zoo.animal.feeding.jar、zoo.animal.care.jar放入其中。前述步驟都完成後,專案結構如下:
模組專案建立完畢之後,仿照前之前的方式開啟以模組專案zoo.animal.talks的根目錄為預設路徑的管理者視窗,執行以下指令進行編譯:
- javac
- --module-path mods
- -d src
- src/zoo/animal/talks/content/*.java
- src/zoo/animal/talks/media/*.java
- src/zoo/animal/talks/schedule/*.java
- src/module-info.java
執行以下指令進行打包:
- jar
- -cvf mods/zoo.animal.talks.jar
- -C src/ .
更新(refresh)專案後,可以看到src目錄下出現*.class檔案,而且mods目錄內有zoo.animal.talks.jar檔案:
建立、編譯、打包zoo.staff模組
由圖7-1我們知道最後一個模組zoo.staff相依於其他3個模組,這也表示著module-info.java檔案中必須有3個requires 關鍵字。模組zoo.staff的內容如下:
唯一的套件與類別:
- package zoo.staff;
- public class Jobs {
- }
模組資訊檔module-info.java內容如下:
- module zoo.staff {
- requires zoo.animal.feeding;
- requires zoo.animal.care;
- requires zoo.animal.talks;
- }
另外和前模組一樣,我們也在與src目錄的同一檔案階層建立了一個名為mods的目錄,然後將前3個專案打包好的zoo.animal.feeding.jar、zoo.animal.care.jar、zoo.animal.talks.jar都放入其中。前述步驟都完成後,專案結構如下:
模組專案建立完畢之後,仿照前之前的方式開啟以模組專案zoo.staff的根目錄為預設路徑的管理者視窗,執行以下指令進行編譯:
- javac
- --module-path mods
- -d src
- src/zoo/staff/*.java
- src/module-info.java
執行以下指令進行打包:
- jar
- -cvf mods/zoo.staff.jar
- -C src/ .
更新(refresh)專案後,可以看到src目錄下出現*.class檔案,而且mods目錄內有zoo.staff.jar檔案:
沒有留言:
張貼留言