命令
原始碼編譯
mvn compile
編譯測試程式碼
mvn test-compile
編譯原始碼和測試原始碼進行測試
mvn test
專案打包
mvn package
在專案所在的目錄執行指令mvn package可以進行專案打包,打包方式是在專案根目錄下的pom.xml檔案中的packaging元素定義的,如果定義為jar則打為jar包,如果是war則打為war包,如果是ear則為ear包。如果pom.xml中沒有定義packaging元素,則會使用預設值jar。打包後的檔案將會放在專案根目錄下的target目錄下。
打包後的檔名將是在pom.xml檔案中定義的artifactId-version的形式,比如在pom.xml中定義的artifactId是hello,定義的version是1.0,則打包後生成的檔案的名稱將是hello-1.0。
安裝jar包到maven的本地倉庫
mvn install
TODO
安裝當前專案到遠端倉庫
mvn deploy
清除存放臨時檔案的target目錄
mvn clean
打包資源
如果需要把一些資原始檔也一併打包到jar包裡面的話,需要在${basedir}/src/main下新建一個resources目錄,然後把所有的資原始檔都放到這個目錄中,這樣這些檔案都會放到類路徑下面。如果需要在測試程式碼中訪問到對應的資源,那麼相對的就需要在${basedir}/src/test下新建一個resources目錄,然後把相應的資原始檔放在這個目錄下。
過濾資原始檔
有的時候有些資原始檔中的值我們需要在編譯的時候動態的指定,maven允許我們在建立檔案的時候以${property_name}的方式指定,這樣當我們進行編譯的時候就會自動的把property_name對應的值替換${property_name}。這個property可以是pom.xml中定義的值,也可以是settings.xml中定義的值,也可以是定義在外部屬性檔案中的值,還可以是系統屬性。maven這種動態替換屬性值的功能預設是關閉的,如果要開啟的話需要在專案的pom.xml檔案中指定filtering的值為true.
<build>
<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
</resource>
</resources>
</build>
使用pom.xml和settings.xml中的元素element作為屬性
我們可以使用pom.xml檔案中的element對應的值來作為屬性值。在maven中,使用pom來表示pom.xml中的根元素project,所以我們可以使用${pom.name}來表示project元素下面的name元素,使用${pom.version}來表示project元素下面的version元素。有些元素在pom.xml檔案中是沒有明確定義的,但是那不代表它們不存在,這是因為它們有一個預設值,像這種元素我們也可以直接拿來使用。同樣的我們需要使用settings.xml中的元素的時候可以使用settings字首來關聯,如${settings.localRepository}就是在settings.xml中定義的localRepository元素的值。
檔案 application.properties
project_name=${pom.name}
project_version=${pom.version}
project_modelVersion=${pom.modelVersion}
project_artifactId=${pom.artifactId}
settings_localRepository=${settings.localRepository}
在resources目錄下定義了上面檔案之後,在命令列模式下進入pom.xml檔案所在的那一級目錄,也就是專案的根目錄,
之後使用mvn compile進行編譯,編譯後可以到target/classes目錄下找到對應的資原始檔,開啟可以看到如下內容:
project_name=mavenAppTest
project_version=1.0-SNAPSHOT
project_modelVersion=4.0.0
project_artifactId=mavenApp
settings_localRepository=D:\develop\mavenRepository
使用外部檔案的屬性關聯
要使用外部檔案的屬性來關聯資原始檔裡面定義的屬性值,那麼我們就需要告訴maven應該去哪裡找這個屬性檔案,
這是通過在pom.xml中指定filter的值來指定的。
<build>
<filters>
<filter>src/main/filters/testFilter.properties</filter>
</filters>
<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
</resource>
</resources>
</build>
在上面程式碼中我們通過build下面的filters下面的filter元素指定了一個外部用於資原始檔過濾的屬性檔案src/main/filters/testFilter.properties,接著我們在src/main/filters下面建立testFilter.properties檔案,
其內容如下:
myFilter.maven.test=test
myFilter.maven.username=andy
然後我們在resources目錄下面定義一個application.properties檔案,內容如下:
project_name=${pom.name}
project_version=${pom.version}
project_modelVersion=${pom.modelVersion}
project_artifactId=${pom.artifactId}
settings_localRepository=${settings.localRepository}
filter_username=${myFilter.maven.username}
接下來我們執行mvn process-resources指令來處理資原始檔,將在target/classes下面對應的application.properties檔案中看到如下內容:
project_name=mavenAppTest
project_version=1.0-SNAPSHOT
project_modelVersion=4.0.0
project_artifactId=mavenApp
settings_localRepository=D:\develop\mavenRepository
filter_username=andy