Maven:基礎

shiyang6017發表於2017-07-27

link

命令

原始碼編譯

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 

相關文章