讀古今文學網 > Maven實戰 > 3.2 編寫主代碼 >

3.2 編寫主代碼

項目主代碼和測試代碼不同,項目的主代碼會被打包到最終的構件中(如jar),而測試代碼只在運行測試時用到,不會被打包。默認情況下,Maven假設項目主代碼位於src/main/java目錄,我們遵循Maven的約定,創建該目錄,然後在該目錄下創建文件com/juvenxu/mvnbook/helloworld/HelloWorld.java,其內容如代碼清單3-2所示:

代碼清單3-2 Hello World的主代碼

這是一個簡單的Java類,它有一個sayHello()方法,返回一個String。同時這個類還帶有一個main方法,創建一個HelloWorld實例,調用sayHello()方法,並將結果輸出到控制台。

關於該Java代碼有兩點需要注意。首先,在絕大多數情況下,應該把項目主代碼放到src/main/java/目錄下(遵循Maven的約定),而無須額外的配置,Maven會自動搜尋該目錄找到項目主代碼。其次,該Java類的包名是com.juvenxu.mvnbook.helloworld,這與之前在POM中定義的groupId和artifactId相吻合。一般來說,項目中Java類的包都應該基於項目的groupId和artifactId,這樣更加清晰,更加符合邏輯,也方便搜索構件或者Java類。

代碼編寫完畢後,使用Maven進行編譯,在項目根目錄下運行命令mvn clean compile會得到如下輸出:

clean告訴Maven清理輸出目錄target/,compile告訴Maven編譯項目主代碼,從輸出中看到Maven首先執行了clean:clean任務,刪除target/目錄。默認情況下,Maven構建的所有輸出都在target/目錄中;接著執行resources:resources任務(未定義項目資源,暫且略過);最後執行compiler:compile任務,將項目主代碼編譯至target/classes目錄(編譯好的類為com/juvenxu/mvnbook/helloworld/HelloWorld.Class)。

上文提到的clean:clean、resources:resources和compiler:compile對應了一些Maven插件及插件目標,比如clean:clean是clean插件的clean目標,compiler:compile是compiler插件的compile目標。後文會詳細講述Maven插件及其編寫方法。

至此,Maven在沒有任何額外的配置的情況下就執行了項目的清理和編譯任務。接下來,編寫一些單元測試代碼並讓Maven執行自動化測試。