1. 程式人生 > >CentOS Maven安裝與使用

CentOS Maven安裝與使用

1、安裝Maven

1.首先到Maven官網下載安裝檔案,下載檔案為apache-maven-3.3.9-bin.tar.gz,點選連結可以直接下載,不需要積分的喲微笑,然後將下載的檔案通過FTP工具存放到CentOS伺服器裡。


2.進入下載資料夾,找到下載的檔案,執行如下命令解壓
tar -xvf  apache-maven-3.3.9-bin.tar.gz


解壓後的資料夾名為apache-maven-3.3.9

3.配置環境變數,編輯/etc/profile檔案,新增如下程式碼
MAVEN_HOME=/home/test/pub/maven/apache-maven-3.3.9
export MAVEN_HOME
export PATH=${PATH}:${MAVEN_HOME}/bin


4.儲存檔案,並執行如下命令使環境變數生效
source /etc/profile


5.在控制檯輸入如下命令,如果能看到Maven相關版本資訊,則說明Maven已經安裝成功
mvn -v


2、配置Maven

MAVEN_HOME/conf目錄下settings.xml檔案是Maven的配置檔案,我們在這裡主要配置如下兩個引數:

配置本地倉庫:

<localRepository>/home/test/pub/maven/repo</localRepository>

配置鏡象:

本例中<mirrorOf>的值為central,表示該配置為中央倉庫的映象,任何對於中央倉庫的請求都會轉至該映象,使用者也可以使用同樣的方法配置其他倉庫的映象。

<mirror>  
   <id>nexus</id>  
   <name>internal nexus repository</name>  
   <url>http://xxx.xxx.xxx.xxx:8081/nexus/content/groups/public/</url>  
   <mirrorOf>central</mirrorOf>  
</mirror>

3、使用Maven建立專案

無論是學習語言還是框架,先來一個Hello World基本上已經是套路了,我們也通過構建一個Hello World專案來了解如何使用Maven。
首先通過maven建立helloworld專案
mvn archetype:generate -DgroupId=helloworld -DartifactId=helloworld

生成的專案目錄如下,其中src/main/java是原始碼目錄,src/test/java是測試檔案目錄。
一共只有三個檔案,開啟這三個檔案,可以看到App.java中已經寫好了一個Hello World程式,而AppTest中是Junit單元測試的程式碼,至於pom.xml,則給出了專案的一些基本資訊以及依賴關係。
helloworld/
├── pom.xml
└── src
    ├── main
    │   └── java
    │       └── helloworld
    │           └── App.java
    └── test
        └── java
            └── helloworld
                └── AppTest.java
這裡主要看一下pom.xml檔案,內容如下
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <groupId>helloworld</groupId>
  <artifactId>helloworld</artifactId>
  <version>1.0-SNAPSHOT</version>
  <packaging>jar</packaging>

  <name>helloworld</name>
  <url>http://maven.apache.org</url>

  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  </properties>

  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
      <scope>test</scope>
    </dependency>
  </dependencies>
</project>
在pom.xml檔案中,首先描述了專案的定義,groupId:artifactId:packaging:version這個四元組能夠唯一標記一個專案。我們不僅可以用這個四元組來標記我們的專案,也可以用來標記其它的專案,比如用來描述專案依賴關係。perperties中定義了專案的屬性,也可以在這裡定義變數並在其它的地方引用。至於最後的dependencies,則是描述了專案的依賴關係,Maven會根據依賴關係自動下載相應的檔案並在編譯時使用。 在大型專案開發中,往往會將其分成若干個子專案,每個子專案都有著自己的的pom.xml,它們與父pom.xml之間相當於繼承的關係。
可以說,pom.xml檔案的配置是整個Maven的核心重點,也是學習Maven過程中需要詳細瞭解的內容。這裡只給出了最簡單的配置樣例,詳細瞭解可以檢視官方文件。
接下來編譯並執行Helloworld專案。
如果是第一次編譯的話,需要聯網,因為Maven會自動下載依賴包。

mvn package 下載的依賴包會儲存在~/.m2/repository資料夾中,開啟這個資料夾,我們會發現裡面的包正是按前面所說的四元組目錄結構進行儲存的。Maven在依賴一個jar包時會先去本地庫查詢,如果沒找到就會從網上下載。當然,並不是所有的包都能從網上下載到,比如我們自己開發的jar包,這時,我們就可以用mvn install命令將一個專案安裝到本地倉庫。
打包成功後我們會發現專案中多了一個target資料夾,目錄結構如下
target/
├── classes
│   └── helloworld
│       └── App.class
├── helloworld-1.0-SNAPSHOT.jar
├── maven-archiver
│   └── pom.properties
├── maven-status
│   └── maven-compiler-plugin
│       ├── compile
│       │   └── default-compile
│       │       ├── createdFiles.lst
│       │       └── inputFiles.lst
│       └── testCompile
│           └── default-testCompile
│               ├── createdFiles.lst
│               └── inputFiles.lst
├── surefire-reports
│   ├── helloworld.AppTest.txt
│   └── TEST-helloworld.AppTest.xml
└── test-classes
    └── helloworld
        └── AppTest.class
可以看到,在package過程中,maven完成了編譯、測試程式碼,生成測試報告,生成jar包等一系列工作。
最後,我們也可以手動執行jar包檢視結果。 $ java -cp target/helloworld-1.0-SNAPSHOT.jar helloworld.App


4、Maven常用命令

Maven的命令非常多,學習命令首先要了解Maven的生命週期。
Maven首先會驗證並處理引用資源,之後進行專案編譯,如果沒有宣告跳過測試,也會編譯測試程式碼並進行測試、以成測試報告。最後,Maven會將編譯好的內容進行打包,用於釋出。
Maven命令與Maven的生命週期有著對應的關係,一個命令也經常會包含多個生命週期,比如mvn package會完成以上所有步驟。
這裡列舉幾個常用的命令
mvn compile     編譯專案,這個命令用於編譯Maven工程,執行命令後會在target資料夾中的classes中生成對應的class檔案。
mvn test        編譯執行單元測試,先自動進行編譯,在執行所有的測試用例。
mvn package     打包(jar or war)
mvn install     將專案安裝到本地倉庫,釋出生成對應的package包。
mvn clean       清空專案,刪除target資料夾,即刪除生成的package包以及class等檔案。
mvn eclipse:eclipse     生成eclipse工程