一、Maven->conf->settings.xml檔案配置
E:\szsgg\video\4maven\apache-maven-3.5.4\conf\setting配置
1. 配置本地倉庫
<localRepository>E:\szsgg\video\4maven\repo</localRepository>
2. 配置下載網站地址
<mirrors>
<mirror>
<id>nexus-aliyun</id>
<mirrorOf>central</mirrorOf>
<name>Nexus aliyun</name>
<url>http://maven.aliyun.com/nexus/content/groups/public</url>
</mirror>
</mirrors>
3. 配置JDK環境
<profiles>
<profile>
<id>jdk-1.8</id>
<activation>
<activeByDefault>true</activeByDefault>
<jdk>1.8</jdk>
</activation>
<properties>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
<maven.compiler.compilerVersion>1.8</maven.compiler.compilerVersion>
</properties>
</profile>
</profiles>
二、idea創建maven工程
- 創建空工程
File->new->project->Empty project
- 空工程中創建maven模塊
New->module->創建,需要特別注意標紅地方,父工程選none,工程路徑確保在工程下而不是模塊下
三、Maven工程中易出現的問題?
1. 在一個模塊呼叫另一個模塊進行test報錯?
有可能是組態檔沒有進行匯入依賴,先查看是否匯入
可能是模塊的jar包沒有放到倉庫中,需要將模塊jar包放置本地倉庫
步驟: 找到此工程->選擇install命令放置到倉庫再次運行即可
2. 依賴范圍可見性問題
compile(默認就是這個范圍)
(1)main目錄下的Java代碼可以訪問這個范圍的依賴
(2)test目錄下的Java代碼可以訪問這個范圍的依賴
(3)部署到Tomcat服務器上運行時要放在WEB-INF的lib目錄下
例如:對Hello的依賴,主程式、測驗程式和服務器運行時都需要用到,
2)test
(1)main目錄下的Java代碼不能訪問這個范圍的依賴
(2)test目錄下的Java代碼可以訪問這個范圍的依賴
(3)部署到Tomcat服務器上運行時不會放在WEB-INF的lib目錄下
例如:對junit的依賴,僅僅是測驗程式部分需要,
3)provided
(1)main目錄下的Java代碼可以訪問這個范圍的依賴
(2)test目錄下的Java代碼可以訪問這個范圍的依賴
(3)部署到Tomcat服務器上運行時不會放在WEB-INF的lib目錄下
3. 依賴的間接傳遞性
當存在間接依賴的情況時,主工程對間接依賴的jar可以訪問嗎?這要看間接依賴的jar包引入時的依賴范圍——只有依賴范圍為compile時可以訪問,例如:
|
Maven工程 |
依賴范圍 |
對A的可見性 |
||
|
A |
B |
C |
compile |
√ |
|
D |
test |
× |
||
|
E |
provided |
× |
||
4. 如何解決依賴間的沖突問題?
1.路徑最短者優先,當本工程依賴或間接依賴兩個不同的版本時,采用離本工程最近的工程
2.路徑相同時先宣告者優先
這里“宣告”的先后順序指的是dependency標簽配置的先后順序,也就是本工程依賴寫在xml檔案中最前面的jar包
5. 如何將依賴中不需要的jar包去掉?也叫依賴的排除
在pro.xml中找到所匯入的依賴,添加以下代碼,切記需要添加到dependency標簽下
<exclusions>
<exclusion>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
</exclusion>
</exclusions>
6. 自定義標簽(解決依賴過多時修改版本號一事)
以對Spring的jar包依賴為例:Spring的每一個版本中都包含spring-context,springmvc等jar包,我們應該匯入版本一致的Spring jar包,而不是使用4.0.0的spring-context的同時使用4.1.1的springmvc,
但是如果我們一個一個修改,就會很麻煩,所以我們可以自定義一個標簽進行統一管理依賴的版本號,類似于java中的變數賦值,當需要修改時就可以統一修改,此標簽需要寫在pro.xml的最上面
<!--統一管理當前模塊的jar包的版本-->
<properties>
<spring.version>4.0.0.RELEASE</spring.version>
</properties>
7. 生命周期
什么是Maven的生命周期?
Maven生命周期定義了各個構建環節的執行順序,有了這個清單,Maven就可以自動化的執行構建命令了,
Maven有三套相互獨立的生命周期,分別是:
- Clean Lifecycle在進行真正的構建之前進行一些清理作業,
- Default Lifecycle構建的核心部分,編譯,測驗,打包,安裝,部署等等,
- Site Lifecycle生成專案報告,站點,發布站點,
再次強調一下它們是相互獨立的,你可以僅僅呼叫clean來清理作業目錄,僅僅呼叫site來生成站點,當然你也可以直接運行mvn clean install site運行所有這三套生命周期,
每套生命周期都由一組階段(Phase)組成,我們平時在命令列輸入的命令總會對應于一個特定的階段,比如,運行mvn clean,這個clean是Clean生命周期的一個階段,有Clean生命周期,也有clean階段,
生命周期與自動化構建
運行任何一個階段的時候,它前面的所有階段都會被運行,例如我們運行mvn install 的時候,代碼會被編譯,測驗,打包,這就是Maven為什么能夠自動執行構建程序的各個環節的原因,此外,Maven的插件機制是完全依賴Maven的生命周期的,因此理解生命周期至關重要,
四、繼承
使用繼承機制就可以將這樣的依賴資訊統一提取到父工程模塊中進行統一管理,
1.創建父工程
(1)父工程的打包方式為pom
<groupId>com.atguigu.maven</groupId>
<artifactId>Parent</artifactId>
<packaging>pom</packaging>
<version>1.0-SNAPSHOT</version>
(2)父工程只需要保留pom.xml檔案即可,
2.在子工程中參考父工程
(1)父工程坐標
<parent>
<!-- 父工程坐標 -->
<groupId>...</groupId>
<artifactId>...</artifactId>
<version>...</version>
<!--指定從當前pom.xml檔案出發尋找父工程的pom.xml檔案的相對路徑-->
<relativePath>..</relativePath>
</parent>
(2)繼承
<!--繼承-->
<parent>
<groupId>com.atguigu.maven</groupId>
<artifactId>Parent</artifactId>
<version>1.0-SNAPSHOT</version>
<!--指定從當前pom.xml檔案出發尋找父工程的pom.xml檔案的相對路徑-->
<relativePath>../Parent/pom.xml</relativePath>
</parent>
此時如果子工程的groupId和version如果和父工程重復則可以洗掉
3. 在父工程中管理依賴
(1)將Parent專案中的dependencies標簽,用dependencyManagement標簽括起來,
<!--依賴管理-->
<dependencyManagement>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.0</version>
<scope>test</scope>
</dependency>
</dependencies>
</dependencyManagement>
(2)在子專案中重新指定需要的依賴,洗掉范圍和版本號,
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
</dependency>
五、酷站
我們可以到http://mvnrepository.com/搜索需要的jar包的依賴資訊,
http://search.maven.org/
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/499063.html
標籤:其他
下一篇:開源原始碼商城系統盤點
