Maven基本知識點總結
阿新 • • 發佈:2019-02-12
1 . maven: 管理多模組開發,方便管理多模組之間的依賴
2 .依賴包的查詢:
1: 所有的依賴都是通過座標來進行儲存的(GVA)
2: 有一些網上的倉庫提供了座標的查詢(http://mvnrepository.com,sonatype nexus,http://search.maven.org/,http://maven.apache.org/plugins/)
3: maven首先會在本地倉庫查詢依賴,如果本地倉庫沒有就到中央倉庫中查詢
3. 依賴的傳遞性
1: 如果A依賴於B,B依賴於c,那麼A久依賴於C,這就是依賴的傳遞性,這種依賴預設是基於compile範圍進行傳遞的
2: compile(編譯範圍)
compile是預設的範圍;如果沒有提供一個範圍,那該依賴的範圍就是編譯範
圍。編譯範圍依賴在所有的classpath中可用,同時它們也會被打包。
專案物件模型
provided(已提供範圍)
provided依賴只有在當JDK或者一個容器已提供該依賴之後才使用。例如,如果
你開發了一個web應用,你可能在編譯classpath中需要可用的Servlet API來編
譯一個servlet,但是你不會想要在打包好的WAR中包含這個Servlet API;這個
Servlet API JAR由你的應用伺服器或者servlet容器提供。已提供範圍的依賴在
編譯classpath(不是執行時)可用。它們不是傳遞性的,也不會被打包。
runtime(執行時範圍)
runtime依賴在執行和測試系統的時候需要,但在編譯的時候不需要。比如,你
可能在編譯的時候只需要JDBC API JAR,而只有在執行的時候才需要JDBC驅動實
現。
test(測試範圍)
test範圍依賴 在一般的 編譯和執行時都不需要,它們只有在測試編譯和測試運
行階段可用。測試範圍依賴在之前的???中介紹過。
system(系統範圍)
system範圍依賴與provided類似,但是你必須顯式的提供一個對於本地系統中
JAR檔案的路徑。這麼做是為了允許基於本地物件編譯,而這些物件是系統類庫
的一部分。這樣的構件應該是一直可用的,Maven也不會在倉庫中去尋找它。如
果你將一個依賴範圍設定成系統範圍,你必須同時提供一個systemPath元素。注
意該範圍是不推薦使用的(你應該一直儘量去從公共或定製的Maven倉庫中引用
依賴)。
4. 模組的聚合:
<groupId>com.mavem.user</groupId>
<artifactId>user-main</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>pom</packaging>
<modules>
<module>../user-dao</module>
<module>../user-log</module>
<module>../user-core</module>
<module>../user-service</module>
</modules>
5. maven中的繼承
1: 將一些公共的資訊,所有模組都需要的資訊放在父pom.xml檔案中中
<modelVersion>4.0.0</modelVersion>
<groupId>com.maven.user</groupId>
<artifactId>user-parent</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>pom</packaging>
<url>http://maven.apache.org</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
2: 所有的模組中將公共的資訊繼承過來
<parent>
<groupId>com.maven.user</groupId>
<artifactId>user-parent</artifactId>
<version>0.0.1-SNAPSHOT</version>
<relativePath>../user-parent/pom.xml</relativePath>
</parent>
3: 依賴的管理(排除版本衝突問題)
當你在你的超級複雜的企業中採用Maven之後,你有了兩百多個相互關聯的Maven專案,
你開始想知道是否有一個更好的方法來處理依賴版本。如果每一個使用如MySQL資料
庫驅動依賴的專案都需要獨立的列出該依賴的版本,在你需要升級到一個新版本的時
候你就會遇到問題。由於這些版本號分散在你的專案樹中,你需要手工的編寫每一個
引用該依賴的pom.xml,確保每個地方的版本號都更改了。即使使用了find,xargs,
和,awk,你仍然有漏掉一個POM的風險。
幸運的是,Maven在dependencyManagement元素中為你提供了一種方式來統一依賴版
本號。你經常會在一個組織或者專案的最頂層的父POM中看到dependencyManagement元
素。使用pom.xml中的dependencyManagement元素能讓你在子專案中引用一個依
賴而不用顯式的列出版本號。Maven會沿著父子層次向上走,直到找到一個擁
有dependencyManagement元素的專案,然後它就會使用在這個dependencyManagement元
素中指定的版本號。 例項如下:
parent:
<modelVersion>4.0.0</modelVersion>
<groupId>com.maven.user</groupId>
<artifactId>user-parent</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>pom</packaging>
<url>http://maven.apache.org</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.10</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>com.maven.user</groupId>
<artifactId>user-dao</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>com.maven.user</groupId>
<artifactId>user-log</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>com.maven.user</groupId>
<artifactId>user-core</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.16</version>
</dependency>
<dependency>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
<version>1.1.1</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.21</version>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
<version>4.0.0.Final</version>
</dependency>
</dependencies>
</dependencyManagement>
子模組;
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
</dependency>
<dependency>
<groupId>com.maven.user</groupId>
<artifactId>user-dao</artifactId>
</dependency>
<dependency>
<groupId>com.maven.user</groupId>
<artifactId>user-log</artifactId>
</dependency>
</dependencies>
6. 版本的管理
總版本號.分支版本號.小版本號-里程碑版本
總版本號的變動一般表示框架的變動
分支版本號:一般表示增加了一些功能
小版本號:在分支版本上面進行bug的修復
里程碑:SNAPSHOT(開發版本)-->alpha(內部測試版本)-->beta(外部的公測版本)-->release(釋出版本)-->GA(穩定版本)
user0.0.1-SNAPSHOT-->user0.0.1-Release--->user1.0.0SHAPSHOT -->user1.0.0-Rlease
-->user0.1.0-SNAPSHOT-->user0.1.0-Rlease
7. nexus私服的介紹,配置,安裝
1、下載並且解壓縮
2、將bin新增到環境變數
3、nexus install將nexus安裝到windows的服務中
4、修改wrapper.conf檔案:
# Set the JVM executable
# (modify this to absolute path if you need a Java that is not on the OS path)
wrapper.java.command=C:\Program Files\Java\jdk1.6.0_23\bin\java
2 .依賴包的查詢:
1: 所有的依賴都是通過座標來進行儲存的(GVA)
2: 有一些網上的倉庫提供了座標的查詢(http://mvnrepository.com,sonatype nexus,http://search.maven.org/,http://maven.apache.org/plugins/)
3: maven首先會在本地倉庫查詢依賴,如果本地倉庫沒有就到中央倉庫中查詢
3. 依賴的傳遞性
1: 如果A依賴於B,B依賴於c,那麼A久依賴於C,這就是依賴的傳遞性,這種依賴預設是基於compile範圍進行傳遞的
2: compile(編譯範圍)
compile是預設的範圍;如果沒有提供一個範圍,那該依賴的範圍就是編譯範
圍。編譯範圍依賴在所有的classpath中可用,同時它們也會被打包。
專案物件模型
provided(已提供範圍)
provided依賴只有在當JDK或者一個容器已提供該依賴之後才使用。例如,如果
你開發了一個web應用,你可能在編譯classpath中需要可用的Servlet API來編
譯一個servlet,但是你不會想要在打包好的WAR中包含這個Servlet API;這個
Servlet API JAR由你的應用伺服器或者servlet容器提供。已提供範圍的依賴在
編譯classpath(不是執行時)可用。它們不是傳遞性的,也不會被打包。
runtime(執行時範圍)
runtime依賴在執行和測試系統的時候需要,但在編譯的時候不需要。比如,你
可能在編譯的時候只需要JDBC API JAR,而只有在執行的時候才需要JDBC驅動實
現。
test(測試範圍)
test範圍依賴 在一般的 編譯和執行時都不需要,它們只有在測試編譯和測試運
行階段可用。測試範圍依賴在之前的???中介紹過。
system(系統範圍)
system範圍依賴與provided類似,但是你必須顯式的提供一個對於本地系統中
JAR檔案的路徑。這麼做是為了允許基於本地物件編譯,而這些物件是系統類庫
的一部分。這樣的構件應該是一直可用的,Maven也不會在倉庫中去尋找它。如
果你將一個依賴範圍設定成系統範圍,你必須同時提供一個systemPath元素。注
意該範圍是不推薦使用的(你應該一直儘量去從公共或定製的Maven倉庫中引用
依賴)。
4. 模組的聚合:
<groupId>com.mavem.user</groupId>
<artifactId>user-main</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>pom</packaging>
<modules>
<module>../user-dao</module>
<module>../user-log</module>
<module>../user-core</module>
<module>../user-service</module>
</modules>
5. maven中的繼承
1: 將一些公共的資訊,所有模組都需要的資訊放在父pom.xml檔案中中
<modelVersion>4.0.0</modelVersion>
<groupId>com.maven.user</groupId>
<artifactId>user-parent</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>pom</packaging>
<url>http://maven.apache.org</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
2: 所有的模組中將公共的資訊繼承過來
<parent>
<groupId>com.maven.user</groupId>
<artifactId>user-parent</artifactId>
<version>0.0.1-SNAPSHOT</version>
<relativePath>../user-parent/pom.xml</relativePath>
</parent>
3: 依賴的管理(排除版本衝突問題)
當你在你的超級複雜的企業中採用Maven之後,你有了兩百多個相互關聯的Maven專案,
你開始想知道是否有一個更好的方法來處理依賴版本。如果每一個使用如MySQL資料
庫驅動依賴的專案都需要獨立的列出該依賴的版本,在你需要升級到一個新版本的時
候你就會遇到問題。由於這些版本號分散在你的專案樹中,你需要手工的編寫每一個
引用該依賴的pom.xml,確保每個地方的版本號都更改了。即使使用了find,xargs,
和,awk,你仍然有漏掉一個POM的風險。
幸運的是,Maven在dependencyManagement元素中為你提供了一種方式來統一依賴版
本號。你經常會在一個組織或者專案的最頂層的父POM中看到dependencyManagement元
素。使用pom.xml中的dependencyManagement元素能讓你在子專案中引用一個依
賴而不用顯式的列出版本號。Maven會沿著父子層次向上走,直到找到一個擁
有dependencyManagement元素的專案,然後它就會使用在這個dependencyManagement元
素中指定的版本號。 例項如下:
parent:
<modelVersion>4.0.0</modelVersion>
<groupId>com.maven.user</groupId>
<artifactId>user-parent</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>pom</packaging>
<url>http://maven.apache.org</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.10</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>com.maven.user</groupId>
<artifactId>user-dao</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>com.maven.user</groupId>
<artifactId>user-log</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>com.maven.user</groupId>
<artifactId>user-core</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.16</version>
</dependency>
<dependency>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
<version>1.1.1</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.21</version>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
<version>4.0.0.Final</version>
</dependency>
</dependencies>
</dependencyManagement>
子模組;
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
</dependency>
<dependency>
<groupId>com.maven.user</groupId>
<artifactId>user-dao</artifactId>
</dependency>
<dependency>
<groupId>com.maven.user</groupId>
<artifactId>user-log</artifactId>
</dependency>
</dependencies>
6. 版本的管理
總版本號.分支版本號.小版本號-里程碑版本
總版本號的變動一般表示框架的變動
分支版本號:一般表示增加了一些功能
小版本號:在分支版本上面進行bug的修復
里程碑:SNAPSHOT(開發版本)-->alpha(內部測試版本)-->beta(外部的公測版本)-->release(釋出版本)-->GA(穩定版本)
user0.0.1-SNAPSHOT-->user0.0.1-Release--->user1.0.0SHAPSHOT -->user1.0.0-Rlease
-->user0.1.0-SNAPSHOT-->user0.1.0-Rlease
7. nexus私服的介紹,配置,安裝
1、下載並且解壓縮
2、將bin新增到環境變數
3、nexus install將nexus安裝到windows的服務中
4、修改wrapper.conf檔案:
# Set the JVM executable
# (modify this to absolute path if you need a Java that is not on the OS path)
wrapper.java.command=C:\Program Files\Java\jdk1.6.0_23\bin\java