国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

Maven使用教程

2019-11-14 21:39:40
字體:
來源:轉載
供稿:網友
Maven使用教程一、Maven介紹我們在開發項目的過程中,會使用一些開源框架、第三方的工具等等,這些都是以jar包的方式被項目所引用,并且有些jar包還會依賴其他的jar包,我們同樣需要添加到項目中,所有這些相關的jar包都會作為項目的依賴。通常,一個java EE項目所依賴的jar包會有很多。然而,這還并非是主要問題,在管理這些jar包過程中,jar包的版本往往是最令人頭疼的問題。選擇一個jar包的版本,需要考慮它所依賴的jar包是否支持這個版本,并且還需要確認依賴它的jar包能不能對這個版本兼容。所以,在過去的構建項目過程中,整理出這么一堆能讓項目正常運行的jar包之后,這個lib目錄就會變為禁區。jar包版本更新了,我們也很少會自找麻煩去觸碰它。至于是不是存在冗余的jar包?能正常運行就好了嘛。。。。Maven的出現,解決了開發過程中的這一難題。它可以對項目依賴的jar包進行管理,可以讓你的項目保持基本的依賴,排除冗余jar包,并且可以讓你非常輕松的對依賴的jar包進行版本升級。而這些僅僅是Maven最基本的功能,它可以在這基礎上對項目進行清理、編譯、測試、打包、發布等等構建項目的工作。可以說,Maven是現在Java社區中最強大的項目管理和項目構建工具,而更加值得慶幸的是,這樣一個強大的工具,它的使用也是非常簡單的。現在,JavaEE項目使用的開源軟件都可以通過Maven來獲取,并且,越來越多的公司也開始使用Maven來管理構建項目了。二、Maven下載安裝1、配置Java運行環境Maven依賴Java運行環境,因此使用Maven之前需要配置Java的運行環境。下載并安裝JDK,配置JDK的環境變量:JAVA_HOME=D:/Dev/Tool/Java/jdk1.6.0_38在path中加入%JAVA_HOME%/bin;2、安裝MavenMaven下載地址:http://maven.apache.org/download.cgi下載Maven最新版本的二進制zip壓縮包就可以,如:apache-maven-3.0.5-bin.zip下載完成后,解壓,例如我們把解壓后的文件夾放在D:/Dev/Tool/目錄下。然后,將Maven的bin目錄添加到path環境變量中,我們這里就是這個目錄:D:/Dev/Tool/apache-maven-3.0.4/bin在Windows命令提示符下,輸入mvn -v測試一下,如圖:這樣,maven就安裝完成了,就是這么簡單。接下來我們先來了解一下Maven是如何來管理項目的。三、Maven依賴管理前面講了,Maven最核心的就是對依賴jar包的管理,那么它是通過什么方式來進行管理的呢?Maven要求每一個jar包都必須明確定義自己的坐標,Maven就是通過這個坐標來查找管理這些jar包的。在Maven中,一個jar包的坐標是由它的groupId、artifactId、version這些元素來定義的。例如:<groupId>org.apache.struts</groupId><artifactId>struts2-core</artifactId><version>2.3.8</version><packaging>jar</packaging>groupId:表明其所屬組織或公司及其所屬項目,命名規則為組織或公司域名反轉加項目名稱。artifactId:項目的模塊名,通常與實際項目名稱一致。模塊的命名通常為項目名前綴加模塊名。version:當前項目的版本號。packaging:定義項目的打包方式,可選值有jar、war、pom。默認為jar注::一個組織或公司都會有很多的項目,而每個項目下都會劃分多個模塊,在開發中我們可以靈活選擇依賴某個模塊。而Maven管理的jar包基本都是模塊性質的項目構建出的jar包。所以,artifactId通常都是模塊名,而不是項目名稱。項目名稱是和組織名稱組合作為groupId來使用的。上面的配置定義了一個Maven項目的坐標,而如果在項目中依賴這個項目時,同樣是利用它的坐標來指定依賴。例如:<PRoject>...<dependencies><dependency><groupId>org.apache.struts</groupId><artifactId>struts2-core</artifactId><version>2.3.8</version></dependency></dependencies>...</project>Maven的配置文件中dependencies元素包含了所有依賴的jar包,每一個jar包依賴使用dependency元素定義。在聲明一個jar包依賴時,除了指定groupId、artifactId、version這三項基本坐標外,還可以使用使用以下元素進行配置:scope元素:指定依賴的范圍exclusions元素:排除傳遞性依賴Maven有以下幾種依賴范圍:compile:編譯依賴范圍(默認值),依賴在編譯、測試、運行期間都有效。test:測試依賴范圍,只對測試的classpath有效,在編譯或運行時無法使用指定為test的依賴包。provided:已提供的依賴范圍,只對編譯和測試的classpath有效,運行期間不會使用這個依賴。例如servlet-api,在運行時容器已經提供,不需要再重復引入。runtime:運行時依賴范圍,編譯時無效,只在測試和運行時使用這個依賴。system:系統依賴范圍,和provided范圍一致,但是provided是使用容器提供依賴,system是使用系統提供依賴,需要指定依賴文件路徑。傳遞性依賴,是指依賴包對其他包的依賴,比如,我們依賴struts2-core,而strtus2-core需要依賴xwork-core、ognl等,Maven會將這些傳遞性依賴同時引入項目之中。這也是Maven的一大優點,簡化了我們對jar包依賴的管理。而有時我們希望替換某個傳遞性依賴時,就需要使用exclusions排除掉這個傳遞性依賴,然后再添加我們自己要替換的依賴包。例如,如下一個Maven的配置文件,pom.xml
  1. <?xmlversion="1.0"encoding="UTF-8"?>
  2. <projectxmlns="http://maven.apache.org/POM/4.0.0"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0http://maven.apache.org/maven-v4_0_0.xsd">
  5. <modelVersion>4.0.0</modelVersion>
  6. <groupId>com.boya.spring</groupId>
  7. <artifactId>spring_ioc</artifactId>
  8. <packaging>jar</packaging>
  9. <version>1.0.0</version>
  10. <name>${project.artifactId}</name>
  11. <description>SpringIocSample</description>
  12. <dependencies>
  13. <!--springstart-->
  14. <dependency>
  15. <groupId>org.springframework</groupId>
  16. <artifactId>spring-core</artifactId>
  17. <version>3.2.0.RELEASE</version>
  18. <exclusions>
  19. <exclusion>
  20. <groupId>commons-logging</groupId>
  21. <artifactId>commons-logging</artifactId>
  22. </exclusion>
  23. </exclusions>
  24. </dependency>
  25. <dependency>
  26. <groupId>org.springframework</groupId>
  27. <artifactId>spring-beans</artifactId>
  28. <version>3.2.0.RELEASE</version>
  29. </dependency>
  30. <dependency>
  31. <groupId>org.springframework</groupId>
  32. <artifactId>spring-context</artifactId>
  33. <version>3.2.0.RELEASE</version>
  34. </dependency>
  35. <!--loggingstart-->
  36. <dependency>
  37. <groupId>org.slf4j</groupId>
  38. <artifactId>slf4j-api</artifactId>
  39. <version>1.6.4</version>
  40. </dependency>
  41. <dependency>
  42. <groupId>org.slf4j</groupId>
  43. <artifactId>slf4j-log4j12</artifactId>
  44. <version>1.6.4</version>
  45. </dependency>
  46. <dependency>
  47. <groupId>org.slf4j</groupId>
  48. <artifactId>jcl-over-slf4j</artifactId>
  49. <version>1.6.4</version>
  50. </dependency>
  51. <dependency>
  52. <groupId>log4j</groupId>
  53. <artifactId>log4j</artifactId>
  54. <version>1.2.16</version>
  55. </dependency>
  56. <dependency>
  57. <groupId>log4jdbc</groupId>
  58. <artifactId>log4jdbc4</artifactId>
  59. <version>1.2</version>
  60. </dependency>
  61. <!--Teststart-->
  62. <dependency>
  63. <groupId>junit</groupId>
  64. <artifactId>junit</artifactId>
  65. <version>4.10</version>
  66. <scope>test</scope>
  67. </dependency>
  68. </dependencies>
  69. </project>
四、Maven倉庫Maven通過項目定義的坐標來管理這些依賴,而這些依賴的物理文件是通過Maven的倉庫來統一管理的。對于一個依賴坐標,它會按照如下方式反映到Maven的倉庫中。1、將groupId轉化為路徑:將groupId中的包名分隔符(.)轉換成路徑分隔符(/)。對于上面的例子就是 org.apache.struts -> org/apache/struts/2、將artifactId轉化為路徑:在groupId轉化的路徑基礎上連接artifactId。生成路徑為: org/apache/struts/struts2-core/3、將verion轉化為路徑:在artifactId轉化的路徑基礎上連接version。生成路徑為: org/apache/struts/struts2-core/2.3.8/4、根據artifactId和version生成依賴包文件名:上例就是 struts2-core-2.3.85、根據依賴的打包方式確定文件的擴展名。對于上例它的擴展名就是.jar這樣根據路徑和文件名就找到了這個物理文件在倉庫中的位置:org/apache/struts/struts2-core/2.3.8/struts2-core-2.3.8.jarMaven的倉庫分為本地倉庫和遠程倉庫。本地倉庫:是Maven在我們本機設置的倉庫目錄,默認目錄為當前用戶目錄下的.m2/repository.遠程倉庫包括中央倉庫、私服、其他公共倉庫。中央倉庫是Maven提供的遠程倉庫,地址是:http://repo.maven.apache.org/maven2私服是我們為了節省帶寬和時間,提升效率,在局域網架設的私有Maven倉庫。其他公共庫有Java.net的maven庫(http://download.java.net/maven/2/)和JBoss Maven庫(http://repository.jboss.com/)等。Maven在根據依賴坐標查找依賴時,首先會從本地倉庫查找該依賴包,當本地倉庫中沒有這個依賴包時,Maven會從中央倉庫查找依賴,并下載到本地倉庫。最后,在我們項目的classpath中引用本地倉庫的依賴包路徑。例如,當項目只依賴strtus2-core這個依賴包時,會生成這樣的classpath文件:
  1. <?xmlversion="1.0"encoding="UTF-8"?>
  2. <classpath>
  3. <classpathentrykind="src"path="src/main/java"output="/src/main/webapp/WEB-INF/classes"including="**/*.java"/>
  4. <classpathentrykind="src"path="src/main/resources"output="/src/main/webapp/WEB-INF/classes"excluding="**/*.java"/>
  5. <classpathentrykind="output"path="src/main/webapp/WEB-INF/classes"/>
  6. <classpathentrykind="con"path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
  7. <classpathentrykind="con"path="com.genuitec.eclipse.j2eedt.core.J2EE14_CONTAINER"/>
  8. <classpathentrykind="var"path="M2_REPO/org/apache/struts/struts2-core/2.3.8/struts2-core-2.3.8.jar"/>
  9. <classpathentrykind="var"path="M2_REPO/org/apache/struts/xwork/xwork-core/2.3.8/xwork-core-2.3.8.jar"/>
  10. <classpathentrykind="var"path="M2_REPO/org/apache/commons/commons-lang3/3.1/commons-lang3-3.1.jar"/>
  11. <classpathentrykind="var"path="M2_REPO/ognl/ognl/3.0.6/ognl-3.0.6.jar"/>
  12. <classpathentrykind="var"path="M2_REPO/javassist/javassist/3.11.0.GA/javassist-3.11.0.GA.jar"/>
  13. <classpathentrykind="var"path="M2_REPO/asm/asm/3.3/asm-3.3.jar"/>
  14. <classpathentrykind="var"path="M2_REPO/asm/asm-commons/3.3/asm-commons-3.3.jar"/>
  15. <classpathentrykind="var"path="M2_REPO/asm/asm-tree/3.3/asm-tree-3.3.jar"/>
  16. <classpathentrykind="var"path="M2_REPO/org/freemarker/freemarker/2.3.19/freemarker-2.3.19.jar"/>
  17. <classpathentrykind="var"path="M2_REPO/commons-fileupload/commons-fileupload/1.2.2/commons-fileupload-1.2.2.jar"/>
  18. <classpathentrykind="var"path="M2_REPO/commons-io/commons-io/2.3/commons-io-2.3.jar"/>
  19. </classpath>
其中,本地倉庫目錄會使用M2_REPO變量表示,因此IDE環境未配置該變量時,需在IDE中添加這個變量的classpath。五、聚合與繼承一個項目通常存在多個模塊,每個模塊都是作為一個獨立的工程存在。通過Maven配置文件可以把多個模塊聚合在一起進行編譯發布,并且它的聚合非常簡單只需要使用<modules>元素添加模塊就可以完成聚合。我們參考struts2的pom.xml文件來看一下聚合的配置方式:
  1. <projectxmlns="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.0http://maven.apache.org/maven-v4_0_0.xsd">
  2. <modelVersion>4.0.0</modelVersion>
  3. <parent>
  4. <groupId>org.apache.struts</groupId>
  5. <artifactId>struts2-parent</artifactId>
  6. <version>2.3.8</version>
  7. </parent>
  8. <groupId>org.apache.struts</groupId>
  9. <artifactId>struts2-apps</artifactId>
  10. <packaging>pom</packaging>
  11. <name>Webapps</name>
  12. <modules>
  13. <module>blank</module>
  14. <module>mailreader</module>
  15. <module>portlet</module>
  16. <module>showcase</module>
  17. <module>rest-showcase</module>
  18. </modules>
  19. ....
  20. </project>
另外,在這個項目的個各模塊間通常是存在引用關系,并且每個模塊會引用一些相同的依賴,Maven也提供了繼承的機制來管理這些共同的依賴。你可以編寫一個pom.xml文件作為父級pom配置,各個模塊在自己的pom.xml中繼承父級pom文件,就像上面的示例那樣,使用<parent>元素標識繼承的父級pom文件。父級pom文件的編寫:1、父級pom文件的packaging必須是pom,它需要作為pom文件發布以便子pom繼承2、在父級pom可以使用<dependencyManagement>配置依賴管理。在<dependencyManagement>下的依賴聲明不會引入實際依賴,但是可以讓子模塊繼承依賴配置。例如,在子模塊中我們只標識依賴的groupId和artifactId,它就可以根據父類的依賴管理獲取這個依賴的version及exclussions等配置。3、在父級pom中可以使用<pluginManagement>配置插件管理。作用和<dependencyManagement>類似,只不過一個管理依賴一個管理插件。子模塊pom文件的編寫:1、需要使用<parent>元素標識繼承的父pom2、可以使用<relativePath>標識父級pom的物理路徑,子模塊會直接從指定的路徑加載父級pom文件,未指定該元素時,子模塊將根據父級pom的坐標從Maven倉庫查找3、子模塊pom可以繼承父級pom中除artifactId之外的大部分配置,因此子模塊的groupId、version以及依賴的version都可以省略。六、Maven腳本使用現在大部分IDE都有插件支持Maven,使用插件可以方便的構建Maven項目,如果IDE不支持Maven插件或未安裝Maven插件也可以使用一個簡單的批處理腳本來完成Maven項目的構建。例如,保存下面內容,存儲為bat格式的批處理文件
cd%~dp0call mvn eclipse:clean eclipse:eclipsepause
運行該文件,就會自動根據該目錄下的pom.xml生成該項目的eclipse開發環境配置。在后面的教程及示例中我都是使用Maven來構建的,pom.xml的示例可以參考我后面的教程和代碼示例。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 太保市| 凤山县| 望都县| 海丰县| 阿拉善左旗| 高唐县| 海阳市| 辽中县| 伽师县| 万载县| 清苑县| 鹿邑县| 永平县| 翁牛特旗| 安远县| 呼图壁县| 张家川| 杭州市| 晋州市| 哈密市| 雷山县| 阿拉尔市| 开远市| 乐平市| 冀州市| 东乌珠穆沁旗| 昌图县| 商南县| 普兰店市| 华宁县| 金湖县| 永丰县| 台南县| 搜索| 嘉峪关市| 宜都市| 长宁县| 盘锦市| 五峰| 金堂县| 海宁市|