maven學習之從搭建maven環境到在項目中如何使用maven

----------maven環境搭建及簡單命令使用
1,maven下載地址:maven.apache.org
到達該頁面找到左側download,然後下載Binary zip archive對應的zip包。
2,配置maven環境變量。
   找到環境變量(這裏設置系統變量,用戶變量同理,這裏略),比如我下載的maven解壓在"D:\DevelopmentRoot\apache-maven-3.5.2",點擊新建按鈕,變量名爲"m2_HOME",變量值爲"D:\DevelopmentRoot\apache-maven-3.5.2",點擊確定按鈕。然後找到path並編輯,在末尾填寫";%m2_HOME%\bin;",點擊確定。打開cmd,輸入"mvn -v",如果此時出來maven版本號等相關信息,則說明我們部署maven成功了。
3,maven的目錄結構:
   src目錄爲一級目錄;main及test及resources目錄爲二級目錄;在main目錄下爲java目錄(三級目錄),同理test目錄下也爲java目錄(三級目錄);在java目錄下爲package目錄(四級目錄)。

4,按照以上maven目錄結構創建相應的maven項目。

可到以下地址下載相應maven項目:http://download.csdn.net/download/qq_35255384/10162473

需要注意的是:Assert.assertEquals方法中的兩個參數要相等,如果不相等則會報錯,詳情可百度查找該方法使用

5,找到pom.xml配置文件(該配置文件可下載struts2jar包,具體在struts2-core-2.3.24.jar包裏,需要解壓該jar包,然後找到該解壓後的地址:struts2-core-2.3.24\META-INF\maven\org.apache.struts\struts2-core下即可看到pom.xml文件,將該文件放置到以上maven項目中,與src平級放置)
6,編寫好後,打開cmd,切換到4步驟中創建的maven項目地址,比如我創建項目的地址是:D:\code\maven01,切換到該地址下,輸入命令:mvn compile 進行編譯(第一次執行時間較長,請耐心等待),執行完後,繼續執行命令:mvn test ,這個時候會在maven項目中生成一個target的文件夾,該文件夾與src文件夾平級放置,裏面包含一些測試報告及相關編譯後等class文件等。繼續輸入命令:mvn package ,則會在target文件夾裏生成一個該maven項目的jar包

------------------clean,install命令使用及maven座標、打包地址講解

7,maven常用的構建命令:
   mvn -v 查看maven版本;mvn compile 編譯maven項目;mvn test對該項目進行測試,生成相應測試報告等;mvn package 打包
   mvn clean 刪除target文件夾(包含該文件夾下所有相關文件) mvn install 安裝jar包到本地倉庫中

其中 mvn clean使用較簡單,這裏不詳細說明,mvn install的命令表示爲某個maven項目打包,比如:我此時想將以上創建的maven01項目打成一個類似於junit的jar包供另一個項目maven02使用,則首先我們在使用命令行打包時切換地址到maven01項目下,假如maven01項目地址:D:\code\maven01,輸入cmd後切換到D:\code\maven01地址下,然後輸入mvn install命令後則會爲maven01打個jar包,那麼該jar包會放在哪裏呢?

默認情況下,該jar包會放在本地倉庫:C:\Users\Administrator\.m2\repository下,如果此時你的maven01項目的pom.xml配置的groupId爲:com.imooc.maven01

artifactId爲:maven01-model,version爲:0.0.1SNAPSHOT。以下截取maven01項目中配置情況:

<groupId>com.imooc.maven01</groupId>
   <!--artifactId表示模塊名,這裏建議使用項目名-->
   <artifactId>maven01-model</artifactId>
   <version>0.0.1SNAPSHOT</version>

則相應的在打maven01的jar包時,會依次根據groupId、artifactId、version生成相應文件夾,所以最後可以查找到本地倉庫放置maven01的jar包地址爲:

C:\Users\Administrator\.m2\repository\com\imooc\maven01\maven01-model\0.0.1SNAPSHOT下,如果本地倉庫找不到jar包,maven會到中央倉庫中進行下載,這也是爲什麼我們引入junit的jar包時並沒有對junit的相關類使用mvn install命令但還是能在本地倉庫中找到junit的jar包的原因。其實,從專業角度來說,pom.xml中的groupId、artifactId、version三個標籤就構成了一個座標,通過這個座標就能找到其在倉庫中的具體位置,這在後面章節中會逐步說明。(maven02的項目可參照maven01來創建,其中maven02的pom.xml配置如下:

<?xml version="1.0" encoding="UTF-8"?>
<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.imooc.maven02</groupId>
   <!--artifactId表示模塊名,這裏建議使用項目名-->
   <artifactId>maven02-model</artifactId>
   <version>0.0.1SNAPSHOT</version>
<!--配置junit的依賴包-->
   <dependencies>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.10</version>
        </dependency>
        <!--添加maven01項目的jar依賴-->
        <dependency>
            <groupId>com.imooc.maven01</groupId>
            <artifactId>maven01-model</artifactId>
            <version>0.0.1SNAPSHOT</version>
        </dependency>
   </dependencies>
</project>


------------------------maven插件archetype之如何學會自動建立maven目錄骨架

兩種方式:

方式1:首先cmd後切換到想要建立maven工程的地址,比如我想在D:\code下建一個maven03的maven項目,並自動生成maven骨架,切換到D:\code後,輸入:mvn archetype:generate後按回車鍵,會出現Choose a number or apply filter.............(即讓你輸入一個數字),這裏輸入:6然後按回車鍵,此時出現Choose org.apache.maven.archetypes:.......version:(大概意思是讓你輸入一個archetype插件的版本號),輸入:4然後按回車鍵(maven此時會幫你下載該版本的archetype插件,所以稍等一會兒)。此時出現Define value for property 'groupId':(讓你輸入groupId編號,如果不清楚groupId則看前面內容,這裏略),輸入:com.maven03然後按回車,此時出現:Define value for property 'artifactId':,輸入:maven03-model然後按回車鍵,此時出現:Define value for property 'version' 1.0-SNAPSHOT:,輸入:0.0.1SNAPSHOT然後按回車鍵,出現:package:,輸入:com.cn.maven.model,然後按回車鍵,此時出現Y::,輸入y然後按回車鍵,直到看到builed success!則表示構建成功,此時會在D:\code下生成文件夾:maven03-model,裏面包含pom.xml及相關maven目錄結構。

方式2:cmd切換到D:\code下,依次輸入:mvn archetype:generate -DgroupId=com.maven04 -DartifactId=maven04-demo -Dversion=0.0.1SNAPSHOT -Dpackage=com.maven04  然後按回車鍵,之後出現Choose a number or apply filter.............(即讓你輸入一個數字),這裏輸入:6然後按回車鍵,此時出現Choose org.apache.maven.archetypes:.......version:(大概意思是讓你輸入一個archetype插件的版本號),輸入:4然後按回車鍵(maven此時會幫你下載該版本的archetype插件,所以稍等一會兒)。知道看到Build Success字樣表明你已創建成功。

----------------------maven座標命名規範

一般groupId標籤用:網址簡寫+項目名來進行命名。比如:com.imooc.maven04;artifactId標籤用:項目名+模塊名來進行命名,比如:maven04-model;version標籤表示版本號。

----------maven本地倉庫及遠程倉庫、鏡像倉庫地址及如何修改默認的本地倉庫地址

maven本地倉庫的默認地址:C:\Users\Administrator\.m2\repository

全球遠程倉庫地址查找方式:在下載的maven文件夾裏,在lib中找到jar包名爲:maven-model-builder-3.5.2.jar(根據自己版本而定具體名字),將其解壓,找到org\apache\maven\model下,有個pom-4.0.0.xml(超級文本),編輯器打開,找到第一個如下標籤:

<repositories>
    <repository>
      <id>central</id>
      <name>Central Repository</name>
      <url>https://repo.maven.apache.org/maven2</url>
      <layout>default</layout>
      <snapshots>
        <enabled>false</enabled>
      </snapshots>
    </repository>
  </repositories>

其中的url值:https://repo.maven.apache.org/maven2即爲全球中央倉庫地址。

鏡像倉庫,可以理解成就是一種倉庫,用來存放資源的地方,與本地倉庫、遠程倉庫作用一樣,默認鏡像倉庫是沒有被放開的,即默認處於關閉狀態,

可在conf文件夾裏面的settings.xml文件中找到,大概是152行,如下:

<mirror>
      <id>mirrorId</id>
      <mirrorOf>repositoryId</mirrorOf>
      <name>Human Readable Name for this Mirror.</name>
      <url>http://my.repository.com/repo/path</url>
    </mirror>

其中,id標籤爲一,mirrorOf可自己定義(也可用通配符*號,表示匹配所有鏡像倉庫),name表示鏡像名,可自己定義,url表示你要去下載的資源地址。

注:鏡像倉庫一旦開啓,所有指向其他倉庫的訪問都會跳轉到鏡像倉庫來,所以一般慎重使用。

比如,我這裏引用國內鏡像倉庫:

<mirror>
      <id>maven04</id>
      <mirrorOf>central</mirrorOf>
      <name>central in china</name>
      <url>http://maven.net.cn/content/groups/public</url>
    </mirror>

怎樣修改默認的本地倉庫地址呢?

找到conf文件夾下的settings.xml文件,將裏面註釋掉的localRepository標籤(因爲默認是關閉的,選用以上的默認地址,需要手動放開進行修改),

比如我想要將我的本地倉庫放在D:\code\repository中,則可以這樣標記localRepository標籤:

<localRepository>D:/code/repository</localRepository>

此時可以通過mvn compile或其他命令來進行驗證,執行命令會在D:/code/repository中下載一些資源。

--------------------------eclipse中安裝maven插件及使用maven進行打包

首先下載好maven插件,解壓後將該文件直接copy到eclipse的dropins文件夾中,然後重啓eclipse即可(這種方法簡單粗暴且屢試不爽)。

需要配置eclipse指向下載好的maven插件,按以下步驟進行搜索填寫:

打開eclipse--->windows----->preferences---->Maven------->Installations(右側點擊Add按鈕,Installation home右側點擊Directory按鈕,指向下載的maven插件文件地址,點擊確定即可)---->User settings(右側Global settings表示全局設置,User settings表示當前用戶下設置,點擊右側browser按鈕,指向下載的maven插件下的conf文件裏的settings地址)--->點擊確定即可。

安裝完畢後,新建maven工程,默認會選擇........quickstart版本的archetype自動創建maven骨架的插件,點擊下一步,此時會讓你輸入:groupId,artifactId,最後點擊finish即可。要運行maven項目進行打包等操作時,找到pom.xml配置文件,右鍵Run as找到maven build,會讓你選擇哪一種命令來操作,在右側Goals文本框中輸入:package,點擊Run,直到控制檯輸入Build Success字樣表示打包成功,此時,在工作空間中即可找到該jar包。

-----------maven聲明週期瞭解

完整的項目構建過程:清理、編譯、測試、打包、集成測試、驗證、部署。

maven聲明週期:clean清理項目;default構建項目;site生成站點。

clean清理項目分爲:pre-clean執行清理前的工作;clean清理上一次構建生成的所有文件;post-clean執行清理後的文件。

default構建項目(核心):compile,test,package,install

site生成項目站點:pre-site在生成項目站點前要完成的工作;site生成項目站點文檔;post-site生成站點後要完成的工作;site-deploy發佈生成的站點到服務器上。

------------怎樣修改maven默認的jdk版本?

maven默認的jdk版本是jdk1.5,這就會導致我們打包後在JRE System Library中看到jdk爲1.5的版本,實際上我們項目中用到的可能是1.7或者1.8或者其他,那麼怎麼修改呢?

找到maven文件中conf文件下的settings.xml文件,找到<profiles>標籤,在裏面添加:

<profile>
      <id>jdk-1.7</id>
      <activation>
        <activeByDefault>true</activeByDefault>
        <jdk>1.7</jdk>
      </activation>
      <properties>
        <maven.compiler.source>1.7</maven.compiler.source>
        <maven.compiler.target>1.7</maven.compiler.target>
        <maven.compiler.compilerVersion>1.7</maven.compiler.compilerVersion>
      </properties>
    </profile>

之後在新建maven項目,就會看到jdk爲1.7了,當然如果想默認是其他jdk版本,只要修改該參數即可。

------------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">
  <!-- 指定當前pom的版本 -->
  <modelVersion>4.0.0</modelVersion>

  <groupId>反寫的公司網址+項目名</groupId>
  <artifactId>項目名+模塊名</artifactId>
  <!-- 一般版本號爲三位數字,第一個數字表示大版本號;第二個數字表示分支版本號;第三個數字版本號表示小版本號。
  版本後綴含義:snapshot快照,alpha內部測試,beta公測,Release穩定版本,GA正式發佈 -->
  <version>當前項目版本號</version>
  <packaging>打包方式,默認爲jar,還有war,zip,pom等格式</packaging>
<!-- 項目描述名 -->
  <name>maven1-model</name>
  <!-- 項目地址 -->
  <url>http://maven.apache.org</url>
  <description>項目描述信息</description>
  <developers>開發者信息</developers>
  <licenses>許可證信息</licenses>
  <organization>組織信息</organization>
  <dependencies>
      <dependency>
          <groupId></groupId>
          <artifactId></artifactId>
          <version></version>
          <type></type>
          <!-- scope標籤表示依賴範圍,有6個值,分別爲:compile,provided,runtime,test,system,import
          compile:默認的範圍,編譯、測試、運行都有效
          provided:在編譯和測試時有效
          runtime:在測試和運行時有效
          test:只在測試範圍有效
          system:與本機系統相關聯,可移植性差
          import:導入的範圍,它只使用在dependencyManager標籤中,表示從其他的pom中導入dependency的配置
           -->
          <scope></scope>
          <!-- 設置依賴是否可選   默認false -->
          <optional></optional>
          <!-- 排除依賴傳遞列表 -->
          <exclusions>
              <exclusion></exclusion>
          </exclusions>
      </dependency>
  </dependencies>
  <!-- 依賴的管理 -->
  <dependencyManagement>
      <dependencies>
          <dependency>
              <groupId></groupId>
              <-------------->
          </dependency>
      </dependencies>
  </dependencyManagement>
  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  </properties>
  <!--  -->
  <parent></parent>
  <modules>
      <module></module>
  </modules>
  <build>
  <!-- 插件列表 -->
      <plugins>
          <plugin>
              <groupId>org.apache.maven.plugins</groupId>
              <artifactId>maven-source-plugin</artifactId>
              <version>2.4</version>
              <executions>
                  <execution>
                      <phase>package</phase>
                      <goals>
                          <goal>jar-no-fork</goal>
                      </goals>
                  </execution>
              </executions>
          </plugin>
      </plugins>
  </build>
</project>
關於maven的依賴傳遞可參照我的另一篇文章:http://blog.csdn.net/qq_35255384/article/details/78857619

maven的依賴衝突遵循兩個原則:短路優先及就近原則。

短路優先:比如B依賴A,C依賴B,按照依賴傳遞性,則有C-->B-->A的關係,

如果此時A引入spring的jar包爲1.2版本,B引入spring的jar包爲1.5版本,則C最終引入spring的jar包爲1.5版本

就近原則:比如C依賴A,同時C依賴B,但C的pom.xml配置中先寫的是A的座標,A引入了jdbc的jar包版本爲2.3,B引入了jdbc的jar包版本爲2.8,則C最終引入的是2.3版本。

關於maven的聚合和集成可參照我的另一篇文章:http://blog.csdn.net/qq_35255384/article/details/78858211

------------------------------------如何用maven創建web項目以及如何使用服務器插件運行web項目

首先新建maven項目,選擇artifact Id爲web-app結尾(表示新建的是web項目)的archetype版本,GroupId填寫:com.org.web-app;Artifact Id填寫:webDemo,點擊finish。

新建完web項目後jsp會報錯,這是因爲缺少servlet-api.jar包,進入maven中央倉庫:http://mvnrepository.com/ ,搜索servlet-api.jar,然後將該jar包座標填寫到pom.xml中需要注意的是:該jar包的依賴範圍爲:provided(表示只在打包測試時用到,正式發佈不用,因爲容器自帶,引入可能導致衝突)。在Java Resource下補全maven項目結構:依次新建文件夾:src/main/java及src/test/java兩個文件夾。然後右鍵項目-->build path-->在source中查看文件的輸出位置=是否指向target/classes,如果不是則需要進行修改。點擊Project Facets查看Dynamic Web Module是否勾選(沒勾選需要選中,表示此項目爲Web動態項目)。最後點擊OK。

怎樣用jetty/tomcat插件來運行該項目呢?

首先在maven中央倉庫中搜索:jetty-maven,找到jetty插件的座標,填寫到pom.xml中(tomcat同理),完整的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.org.web-app</groupId>
  <artifactId>webDemo</artifactId>
  <packaging>war</packaging>
  <version>0.0.1-SNAPSHOT</version>
  <name>webDemo Maven Webapp</name>
  <url>http://maven.apache.org</url>
  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
      <scope>test</scope>
    </dependency>
    <!-- 添加servlet-api.jar,依賴範圍僅限於打包和測試運行發佈則不需要 -->
    <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>javax.servlet-api</artifactId>
        <version>4.0.0</version>
        <scope>provided</scope>       
    </dependency>       
  </dependencies>
  <build>
      <plugins>
          <plugin>
          <!-- 添加jetty插件
              <groupId>org.eclipse.jetty</groupId>
            <artifactId>jetty-maven-plugin</artifactId>
            <version>9.4.8.v20171121</version>-->
        <!-- 使用tomcat插件運行 -->    
            <groupId>org.apache.tomcat.maven</groupId>
              <artifactId>tomcat7-maven-plugin</artifactId>
              <version>2.2</version>       
            <executions>
                <execution>
                    <!-- 在打包成功後使用jetty:run來運行jetty -->
                    <phase>package</phase>
                    <goals>
                        <goal>run</goal>
                    </goals>
                </execution>
            </executions>
          </plugin>
      </plugins>
    <finalName>webDemo</finalName>
  </build>
</project>

最後點擊項目右鍵--->run as Maven build--->輸入package直到出現start字樣表示成功啓動服務(第一次啓動下載東西較多,會慢點)。

jetty訪問地址:http://localhost:8080/

tomcat訪問地址:http://localhost:8080/webDemo/

需要注意的是,如果pom.xml中沒有加入<executions>標籤內容,則運行項目時輸入:jetty:run或者tomcat:run即可運行。

---------------------mvn配置exec插件並運行java指定文件的main方法可參照以下地址:

https://segmentfault.com/a/1190000005043251

-----如何用maven將本地jar包放入本地倉庫中並在項目中進行引用

https://www.cnblogs.com/lixuwu/p/5855031.html



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章