Maven 架構搭建的命令行及學習筆記
==================================================
1.配置環境變量:
說明:
系統環境變量和用戶變量的區別
搭建編譯環境時爲什麼有時候要設置環境變量,而有時又設置用戶變量?
環境變量分爲系統環境變量和用戶環境變量。
你所說的環境變量是指系統環境變量,對所有用戶起作用
而用戶環境變量只對當前用戶起作用。
例如你要用java,那麼你把java的bin目錄加入到path變量下面,那麼它就是系統環境變量,所有用戶登陸,在命令行輸入java都會有java的幫助信息出來。而如果你在某個用戶的變量下面新建一個變量,那麼它就只對這個用戶有用,當你以其他用戶登陸時這個變量就和不存在一樣。
2.如何查詢環境環境變量:
C:\Users\Administrator>echo %M2_HOME% D:\java\apache-maven-3.2.3 C:\Users\Administrator>mvn -v Apache Maven 3.2.3 (33f8c3e1027c3ddde99d3cdebad2656a31e8fdf4; 2014-08-12T04:58:1 0+08:00) Maven home: D:\java\apache-maven-3.2.3 Java version: 1.6.0_29, vendor: Sun Microsystems Inc. Java home: D:\java\JDK1.6\jre Default locale: zh_CN, platform encoding: GBK OS name: "windows 7", version: "6.1", arch: "x86", family: "windows" C:\Users\Administrator>
----
3.Maven初始化執行mvn help:system查詢環境參數,並且下載基本的maven到默認的~/m2設置的倉庫。
系統會自動從中心庫(如果配置代理服務器,或者nexus服務器)
下載maven-help-plugin插件。
其次獲得環境信息,最後顯示環境變量信息,(使用.....省略相關信息)
s/plexus-utils/1.5.7/plexus-utils-1.5.7.pom (8 KB at 8.2 KB/sec) Downloading: http://localhost:8081/nexus/content/groups/public/jdom/jdom/1.0/jdo m-1.0.pom Downloaded: http://localhost:8081/nexus/content/groups/public/jdom/jdom/1.0/jdom -1.0.pom (2 KB at 1.8 KB/sec) ...................................... stream/xstream/1.4.3/xstream-1.4.3.jar (471 KB at 20.2 KB/sec) [INFO] =============================================================================== ========================= Platform Properties Details ========================= =============================================================================== =============================================================================== System Properties =============================================================================== java.runtime.name=Java(TM) SE Runtime Environment sun.boot.library.path=D:\java\JDK1.6\jre\bin java.vm.version=20.4-b02 java.vm.vendor=Sun Microsystems Inc. java.vendor.url=http://java.sun.com/ ............... java.endorsed.dirs=D:\java\JDK1.6\jre\lib\endorsed os.arch=x86 java.io.tmpdir=C:\Users\ADMINI~1\AppData\Local\Temp\ line.separator= java.vm.specification.vendor=Sun Microsystems Inc. user.variant= os.name=Windows 7 classworlds.conf=D:\java\apache-maven-3.2.3\bin\m2.conf sun.jnu.encoding=GBK ............................... sun.io.unicode.encoding=UnicodeLittle sun.cpu.endian=little sun.desktop=windows sun.cpu.isalist=pentium_pro+mmx pentium_pro pentium+mmx pentium i486 i386 i86 =============================================================================== Environment Variables =============================================================================== CLASSWORLDS_JAR="D:\java\apache-maven-3.2.3\boot\plexus-classworlds-2.5.1.jar" TMP=C:\Users\ADMINI~1\AppData\Local\Temp PROGRAMFILES(X86)=C:\Program Files (x86) COMPUTERNAME=PC201408041613 OS=Windows_NT PROMPT=$P$G .......................................................... HOME=C:\Users\Administrator PROCESSOR_LEVEL=6 ERROR_CODE=0 SESSIONNAME=Console USERNAME=Administrator PATHEXT=.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC WINDOWS_TRACING_FLAGS=3 PUBLIC=C:\Users\Public PROCESSOR_REVISION=2505 [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESS [INFO] ------------------------------------------------------------------------ [INFO] Total time: 03:18 min [INFO] Finished at: 2014-12-19T13:32:51+08:00 [INFO] Final Memory: 5M/15M [INFO] ------------------------------------------------------------------------ C:\Users\Administrator>
構造結束
3.1. Maven
3.1.1. Maven介紹
我們使用maven構建應用環境,因此我們先來簡單介紹maven。Maven是什麼?如何回答這個問題 要看你怎麼看這個問題。 絕大部分Maven用戶都稱Maven是一個"構建工具":一個用來把源代碼構建成可發佈的構件的工具。構建工程師和項目經理會說Maven是一個更復雜 的東西:一個項目管理工具。那麼區別是什麼? 像Ant這樣的構建工具僅僅是關注預處理,編譯,打包,測試和分發,而 Maven 這樣的一個項目管理工具提供了構建工具所提供功能的超集, 除了提供構建的功能,Maven還可以生成報告,生成Web站點,並且幫助推動工作團 隊成員間的交流。
Maven目前最新版本是2.1.0. 因爲maven2.0的版本與maven1.0相比完全是重新設計的,而且速度比以前更快,所以稱爲 maven2. 目前很多的開源項目都已經採用maven2構建,足見其流行好用的程度。 注:本指南中所提及的maven均指maven2。
3.1.2. Maven常用命令
mvn archetype:create :創建 Maven 項目
mvn compile :編譯源代碼
mvn test-compile :編譯測試代碼
mvn test : 運行應用程序中的單元測試
mvn site : 生成項目相關信息的網站
mvn clean :清除目標目錄中的生成結果
mvn package : 依據項目生成 jar 文件
mvn install :在本地 Repository 中安裝 jar
mvn eclipse:eclipse :生成 Eclipse 項目文件
mvn -Dmaven.test.skip=true : 忽略測試文檔編譯
3.2. POM
POM全稱是Project Object Model,即項目對象模型。pom.xml是maven的項目描述文件,它類似與antx的project.xml文件。pom.xml文件以xml的 形式描述項目的信息,包括項目名稱、版本、項目id、項目的依賴關係、編譯環境、持續集成、項目團隊、貢獻管理、生成報表等等。總之,它包含了所有的項目 信息。
3.2.1. 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>org.codehaus.mojo</groupId> <artifactId>my-project</artifactId> <version>1.0</version> </project>
modelVersion 描述這個POM文件是遵從哪個版本的項目描述符。
groupId 針對一個項目的普遍唯一識別符。通常用一個完全正確的包的名字來與其他項目的類似名字來進行區分(比如:org.apache.maven)。
artifactId 在給定groupID 的group裏面爲artifact 指定的標識符是唯一的 , artifact 代表的是被製作或者被一個project應用的組件(產出物)。
version 當前項目產生的artifact的版本
以上4個元素缺一不可,其中groupId, artifactId, version描述依賴的項目唯一標誌。
3.2.2. pom.xml文件結構
<project> <modelVersion>4.0.0</modelVersion> <!- The Basics 項目的基本信息-> <groupId>...</groupId> <artifactId>...</artifactId> <version>...</version> <packaging>...</packaging> <dependencies>...</dependencies> <parent>...</parent> <dependencyManagement>...</dependencyManagement> <modules>...</modules> <properties>...</properties> <!- Build Settings 項目的編譯設置-> <build>...</build> <reporting>...</reporting> <!- More Project Information 其它項目信息 -> <name>...</name> <description>...</description> <url>...</url> <inceptionYear>...</inceptionYear> <licenses>...</licenses> <organization>...</organization> <developers>...</developers> <contributors>...</contributors> <!-- Environment Settings -> <issueManagement>...</issueManagement> <ciManagement>...</ciManagement> <mailingLists>...</mailingLists> <scm>...</scm> <prerequisites>...</prerequisites> <repositories>...</repositories> <pluginRepositories>...</pluginRepositories> <distributionManagement>...</distributionManagement> <profiles>...</profiles> </project>
project是pom.xml的根節點,至於其它元素請參考POM Reference
3.2.3. POM很重要的3個關係
POM有3個很重要的關係:依賴、繼承、合成。
3.2.3.1. 依賴關係
<dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.0</version> <type>jar</type> <scope>test</scope> <optional>true</optional> </dependency> ... </dependencies>
如果想依賴一個maven庫中沒有的一個jar包,方法很簡單,就是先將此jar包使用以下的命令安裝到本地maven庫中:
mvn install:install-file -Dfile=my.jar -DgroupId=mygroup -DartifactId=myartifactId -Dversion=1
再把依賴關係加進去即可。
3.2.3.2. 繼承關係
另一個強大的變化, maven帶來的是項目繼承。
3.2.3.2.1. 定義父項目
<project> <modelVersion>4.0.0</modelVersion> <groupId>com.mygroup </groupId> <artifactId>my-parent</artifactId> <version>2.0</version> <packaging>pom</packaging> </project>
packaging 類型,定義值爲 pom用於定義爲parent和合成多個項目。 當然我們創建的maven項目的pom都繼承maven的super pom, 如果想看項目(父或子)的完全的pom結構,可以運行:
mvn help:effective-pom
就可以了。
3.2.3.2.2. 子項目配置
<project> <modelVersion>4.0.0</modelVersion> <groupId>com.mygroup </groupId> <artifactId>my-child-project</artifactId> <parent> <groupId>com.mygroup </groupId> <artifactId>my-parent</artifactId> <version>2.0</version> <relativePath>../my-parent</relativePath> </parent> </project>
relativePath可以不需要,但是用於指明parent的目錄,用於快速查詢。
3.2.3.3. 合成關係
一個項目有多個模塊,也叫做多重模塊,或者合成項目。 如下的定義:
<project> <modelVersion>4.0.0</modelVersion> <groupId>com.mygroup </groupId> <artifactId>my-parent</artifactId> <version>2.0</version> <modules> <module>my-child-project1<module> <module>my-child-project2<module> </modules> </project>
其中module 描述的是子項目的相對路徑 。
3.2.4. dependencyManagement和Profile
Maven 還我們提供了一個dependencyManagement元素,用來提供了一種方式來統一依賴版本號。dependencyManagement元素一 般用在頂層的父POM。使用pom.xml中的dependencyManagement元素能讓你在子項目中引用一個依賴而不用顯式的列出版本號。 Maven會沿着父子層次向上走,直到找到一個擁有dependencyManagement元素的項目,然後它就會使用在這個 dependencyManagement元素中指定的版本號,這樣就解決了修改依賴版本號不完全的問題。
Maven的Profile元素可以爲一個特殊的環境自定義一個特殊的構建,使得不同環境間構建的可移植性成爲可能。比如要使用 production profile來運行mvn install,你需要在命令行傳入-Pproduction參數,這裏production是profile的id。要驗證production profile覆蓋了默認的Compiler插件配置,可以像這樣以開啓調試輸入(-X) 的方式運行Maven。