1. 程式人生 > >maven系列:漫談maven

maven系列:漫談maven

我們一起來回顧下老式的開發上線流程哈
1)領導搭建一個ssh或者其他web框架,然後各自開發自己的業務程式碼,然後編寫單元測試(這個看情況,樓主以前也不是每個專案都要寫單元測試/攤手,當然這敏捷開發中,這個環節至關重要),然後執行,生成測試報告,提交jar包
2)遇到三方jar包就需要自己找,比如列印日誌(log4j)等,有的時候還咬咬牙使用可憐的積分去csdn下載jar包,那是一個狠啊,說好open的嘛,一個jar包還要積分才能下載,過分了哈。下載之後放到lib中
3)試著嘗試跑專案,看看報不報和jar包有關的錯,比如某個類不存在啊,或者有沒有依賴不全啊,報小紅叉啊,包衝突啊等各種情況,更噁心的是不同版本號的同一個jar包產生不同的效果


4)專案跑通了,每個人開始開發,然後集中程式碼,看看能不能跑通
5)集中測試,編譯,打包,部署,都是手工的哦(如果是手工打造一輛勞斯萊斯,那也是不錯的嘛),這個地方吃虧不討巧的事屢屢發生,開發者崩潰
6)測試環境部署好之後,測試工程師上場,發現bug等,開發工程師修改bug然後重複上面的4,5步驟
7)部署也很麻煩,停下tomcat,幹掉舊的war包,放入新的war包,啟動工程
8)如果工程比較大,嘿嘿

時代在發展,社會在進步,這些頭疼的事得成為過去,成為簡單的事,就和以前人不能上天,現在可以上天了一樣,上天就變得簡單了
1)批量跑單元測試
2)多個工程集中
3)通過配置管理依賴
4)自動管理jar包
5)自動編譯打包釋出

6)……

在當代能把這兩件事幹好的,有兩個我要推薦的,一個是gradle,一個是我們接下來給大家講的maven
有人會問了,maven真的有你說的那麼神麼,必須的呀,就讓我帶著大家逐漸解開

一)開發環境準備
安裝java,這個去官網下載安裝,配置環境變數,執行命令java -version,看到對應的版本號即可
安裝maven,同樣也是去官網下載安裝,配置環境變數,執行命令mvn -v,看到對應的版本號即可,因為maven也是java寫的,所以jdk必不可少

二)配置檔案小修改
我們開啟maven安裝目錄的conf目錄中的settings.xml,我們發現裡面有很多東西,這個在後面的講解中會逐個放開,我們在此就新增一個mirror,因為預設的是國外的映象,會導致下載jar包的時候很慢,我們給改成國內的,比如阿里的(注意,如下程式碼放到mirrors標籤中

        <mirror>                
                <id>nexus-aliyun</id>
                <mirrorOf>*</mirrorOf>
                <name>Nexus aliyun</name>
                <url>http://maven.aliyun.com/nexus/content/groups/public</url>
        </mirror>

當然了,很多公司都有自己的自建倉庫,這個時候把url改為自己公司的即可


三)建立maven工程
我們建立一個專案資料夾,然後我們使用maven命令(mvn archetype:generate)建立一個工程
mvn archetype:generate -DgroupId=com.lyh.maven -DartifactId=my-first-app -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false
其中my-first-app就是你建立工程的名字,我們進入到my-first-app資料夾中,看下目錄結構
├─src
│  ├─main
│  │  └─java
│  │      └─com
│  │          └─lyh
│  │              └─maven-------App.java
│  └─test
│      └─java
│          └─com
│              └─lyh
│                  └─maven-------App.java

│ pom.xml

目錄簡單介紹下,其中src/main/java目錄包含了這個專案的java原始碼,src/test/java目錄包含了測試程式碼,pom.xml檔案是maven的核心配置檔案,是這個專案的Project Object Model。
我們開啟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/maven-v4_0_0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.lyh.maven</groupId>
  <artifactId>my-first-app</artifactId>
  <packaging>jar</packaging>
  <version>1.0-SNAPSHOT</version>
  <name>my-first-app</name>
  <url>http://maven.apache.org</url>
  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
      <scope>test</scope>
    </dependency>
  </dependencies>
</project>

<project>:pom.xml中的頂層元素
<modelVersion>:POM本身的版本號,一般很少變化
<groupId>:建立這個專案的公司或者組織,一般用公司網站字尾,比如com.company,或者cn.company,或者org.lyh
<artifactId>:這個專案的唯一標識,一般生成的jar包名稱,會是<artifactId>-<version>.<extension>這個格式,比如說myapp-1.0.jar
<packaging>:要用的打包型別,比如jar,war,等等。
<version>:這個專案的版本號
<name>:這個專案用於展示的名稱,一般在生成文件的時候使用
<url>:這是這個專案的文件能下載的站點url,一般用於生成文件
<description>:用於專案的描述


同時我們發現檔案中
dependencies中有dependency,彷彿是一個jar包,嗯,這是個預設引用的jar,這就使用到了maven的包依賴管理,其中
groupId 組織
artifactId jar的唯一標識
version jar包版本號
scope 範圍

version一般是三層,如上3.8.1,這三個不是亂定義的,是有一定的規律:第三位是最小版本,一般如果是修復一些bug,或者作出輕微的改動,會累加第三位小版本;
第二位是小版本,一般如果加入一些新的功能或者模組,或者做了一些重構,會累加第二位小版本;
第一位是大版本,一般就是如果整體架構有特別的升級或者變化,才會累加第一位大版本。

這些依賴jar包在c->使用者->XXX->.m2->repository資料夾中,這個也可以通過setting.xml檔案進行修改的
該有的都有了,我們知道要執行一個java程式得把其打成jar包執行,可是我們在上面並沒有發現可以放jar包的地方啊,
這個時候我們得執行命令mvn clean package來重新構建下工程
構建好之後,我們發現和src並列有一個target目錄,我們開啟看一下,居然發現了jar包,這速度槓槓的啊
其實執行這個命令,把原來的.class檔案都刪除了,並重新編譯了,然後打包成jar包,太方便了
簡單的說一下mvn clean package命令發生了什麼①檢視setting.xml檔案的配置檔案  ②解析maven工程中的pom.xml ③根據pom.xml中的依賴,看下本地有沒有,如果沒有的話就去遠端倉庫下載   ④下載之後就快取起來,便於以後使用  ⑤clean 清理上一次的構建檔案  ⑥重新編譯程式碼  ⑦重新打成一個jar包

四)執行
執行命令java -cp target/my-first-app-1.0-SNAPSHOT.jar com.lyh.maven.App,我們看到列印helloword

說了這麼多,簡單概括:maven讓依賴和構建變得簡單

常用命令一覽
1. 建立Maven的普通java專案:
   mvn archetype:create  -DgroupId=packageName  -DartifactId=projectName 
2. 建立Maven的Web專案:  
    mvn archetype:create -DgroupId=packageName   -DartifactId=webappName-DarchetypeArtifactId=maven-archetype-webapp   
3. 編譯原始碼: mvn compile
4. 編譯測試程式碼:mvn test-compile   
5. 執行測試:mvn test   
6. 產生site:mvn site  
7. 打包:mvn package  
8. 在本地Repository中安裝jar:mvn install
9. 清除產生的專案:mvn clean  
10. 生成eclipse專案:mvn eclipse:eclipse 
11. 生成idea專案:mvn idea:idea 
12. 組合使用goal命令,如只打包不測試:mvn -Dtest package  
13. 編譯測試的內容:mvn test-compile 
14. 只打jar包: mvn jar:jar 
15. 只測試而不編譯,也不測試編譯:mvn test -skipping compile -skipping test-compile
      ( -skipping 的靈活運用,當然也可以用於其他組合命令) 
16. 清除eclipse的一些系統設定:mvn eclipse:clean