maven史上最全記錄

轉載自:
https://blog.csdn.net/u010425776/article/details/52027706
什么是Maven激况?
如今我們構建一個項目需要用到很多第三方的類庫,如寫一個使用Spring的Web項目就需要引入大量的jar包唱较。一個項目Jar包的數(shù)量之多往往讓我們瞠目結舌天梧,并且Jar包之間的關系錯綜復雜戚丸,一個Jar包往往又會引用其他Jar包,缺少任何一個Jar包都會導致項目編譯失敗裸违。
以往開發(fā)項目時掖桦,程序員往往需要花較多的精力在引用Jar包搭建項目環(huán)境上,而這一項工作尤為艱難累颂,少一個Jar包滞详、多一個Jar包往往會報一些讓人摸不著頭腦的異常。
而Maven就是一款幫助程序員構建項目的工具紊馏,我們只需要告訴Maven需要哪些Jar 包料饥,它會幫助我們下載所有的Jar,極大提升開發(fā)效率朱监。

安裝Maven 和 Maven的Eclipse插件
http://blog.csdn.net/qjyong/article/details/9098213

Maven規(guī)定的目錄結構
若要使用Maven岸啡,那么項目的目錄結構必須符合Maven的規(guī)范,其目錄結構如下:

Maven基本命令
-v:查詢Maven版本
本命令用于檢查maven是否安裝成功赫编。
Maven安裝完成之后巡蘸,在命令行輸入mvn -v,若出現(xiàn)maven信息擂送,則說明安裝成功悦荒。

compile:編譯
將java源文件編譯成class文件

test:測試項目
執(zhí)行test目錄下的測試用例

package:打包
將項目打成jar包

clean:刪除target文件夾

install:安裝
將當前項目放到Maven的本地倉庫中。供其他項目使用

什么是Maven倉庫嘹吨?
Maven倉庫用來存放Maven管理的所有Jar包搬味。分為:本地倉庫 和 中央倉庫。

本地倉庫
Maven本地的Jar包倉庫。
中央倉庫
Maven官方提供的遠程倉庫碰纬。
當項目編譯時萍聊,Maven首先從本地倉庫中尋找項目所需的Jar包,若本地倉庫沒有悦析,再到Maven的中央倉庫下載所需Jar包寿桨。

什么是“坐標”?
在Maven中强戴,坐標是Jar包的唯一標識亭螟,Maven通過坐標在倉庫中找到項目所需的Jar包。
如下代碼中骑歹,groupId和artifactId構成了一個Jar包的坐標媒佣。

<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.1.1</version>
</dependency>
1
2
3
4
5
groupId:所需Jar包的項目名
artifactId:所需Jar包的模塊名
version:所需Jar包的版本號
傳遞依賴 與 排除依賴
傳遞依賴:如果我們的項目引用了一個Jar包,而該Jar包又引用了其他Jar包陵刹,那么在默認情況下項目編譯時,Maven會把直接引用和簡潔引用的Jar包都下載到本地欢嘿。
排除依賴:如果我們只想下載直接引用的Jar包衰琐,那么需要在pom.xml中做如下配置:(將需要排除的Jar包的坐標寫在中)
<exclusions>
<exclusion>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
</exclusion>
</exclusions>
1
2
3
4
5
6
依賴沖突
若項目中多個Jar同時引用了相同的Jar時,會產生依賴沖突炼蹦,但Maven采用了兩種避免沖突的策略羡宙,因此在Maven中是不存在依賴沖突的。

短路優(yōu)先
本項目——>A.jar——>B.jar——>X.jar
本項目——>C.jar——>X.jar
1
2
若本項目引用了A.jar掐隐,A.jar又引用了B.jar狗热,B.jar又引用了X.jar,并且C.jar也引用了X.jar虑省。
在此時匿刮,Maven只會引用引用路徑最短的Jar。

聲明優(yōu)先
若引用路徑長度相同時探颈,在pom.xml中誰先被聲明熟丸,就使用誰。
聚合
什么是聚合伪节?
將多個項目同時運行就稱為聚合光羞。

如何實現(xiàn)聚合?
只需在pom中作如下配置即可實現(xiàn)聚合:

<modules>
    <module>../模塊1</module>
    <module>../模塊2</module>
    <module>../模塊3</module>
</modules>

1
2
3
4
5
繼承
什么是繼承怀大?
在聚合多個項目時纱兑,如果這些被聚合的項目中需要引入相同的Jar,那么可以將這些Jar寫入父pom中化借,各個子項目繼承該pom即可潜慎。

如何實現(xiàn)繼承?

父pom配置:將需要繼承的Jar包的坐標放入標簽即可。
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.apache.shiro</groupId>
<artifactId>shiro-spring</artifactId>
<version>1.2.2</version>
</dependency>
</dependencies>
</dependencyManagement>
1
2
3
4
5
6
7
8
9
子pom配置:
<parent>
<groupId>父pom所在項目的groupId</groupId>
<artifactId>父pom所在項目的artifactId</artifactId>
<version>父pom所在項目的版本號</version>
</parent>
1
2
3
4
5
使用Maven構建Web項目
New Maven項目:選擇WebApp:

若使用JSP勘纯,需添加Servlet依賴:
注:Servlet依賴只在編譯和測試時使用局服!

<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.0.1</version>

<scope>provided</scope>
</dependency>
1
2
3
4
5
6
7
在Bulid Path中設置resource輸出目錄:

勾選:Dynamic Web Module

刪掉測試目錄

在pom中加入jetty的插件,并設置JDK版本:

<plugins>
    <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-compiler-plugin</artifactId>
        <configuration>
            <source>1.8</source>
            <target>1.8</target>
        </configuration>
    </plugin>

    <plugin>
        <groupId>org.eclipse.jetty</groupId>
        <artifactId>jetty-maven-plugin</artifactId>
        <version>9.3.10.v20160621</version>
        <executions>
            <execution>
                <phase>package</phase>
            </execution>
        </executions>
    </plugin>
</plugins>

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
運行項目:

輸入:jetty:run

訪問127.0.0.1:8080
若出現(xiàn)如下界面驳遵,表示成功淫奔!

pom.xml詳解
pom.xml是Maven的核心,你的項目需要什么Jar包就在pom.xml里面配置堤结。當編譯項目時Maven讀取該文件唆迁,并從倉庫中下載相應的Jar包。

<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.0http://maven.apache.org/maven-v4_0_0.xsd">

<parent>

<artifactId/>

<groupId/>

<version/>

<relativePath/>
</parent>

<modelVersion>4.0.0</modelVersion>

<groupId>cn.erhuowang</groupId>

<artifactId>erhuowang-maven2</artifactId>

<packaging>war</packaging>

<version>1.0-SNAPSHOT</version>

<name>erhuo-maven</name>

<url>http://erhuowang.cn</url>

<description>A maven project to study maven.</description>

<prerequisites>

<maven/>
</prerequisites>

<issueManagement>

<system>erhuowang</system>

<url>http://erhuowang.cn</url>
</issueManagement>

<ciManagement>

<system/>

<url/>

<notifiers>

<notifier>

<type/>

<sendOnError/>

<sendOnFailure/>

<sendOnSuccess/>

<sendOnWarning/>

<address/>

<configuration/>
</notifier>
</notifiers>
</ciManagement>

<inceptionYear/>

<mailingLists>

<mailingList>

<name>Demo</name>

<post>chaibozhou@163.com</post>

<subscribe>chaibozhou@163.com</subscribe>

<unsubscribe>chaibozhou@163.com</unsubscribe>

<archive>chaibozhou@163.com</archive>
</mailingList>
</mailingLists>

<developers>

<developer>

<id>HELLO WORLD</id>

<name>chaimm</name>

<email>chaibozhou@163.com</email>

<url/>

<roles>
<role>Project Manager</role>
<role>Architect</role>
</roles>

<organization>demo</organization>

<organizationUrl>http://erhuowang.cn</organizationUrl>

<properties>
<dept>No</dept>
</properties>

<timezone>-5</timezone>
</developer>
</developers>

<contributors>

<contributor>
<name/><email/><url/><organization/><organizationUrl/><roles/><timezone/><properties/>
</contributor>
</contributors>

<licenses>

<license>

<name>Apache 2</name>

<url>http://www.baidu.com/erhuwoang/LICENSE-2.0.txt</url>

<distribution>repo</distribution>

<comments>A business-friendly OSS license</comments>
</license>
</licenses>

<scm>

<connection>
scm:svn:http://svn.baidu.com/banseon/maven/banseon/banseon-maven2-trunk(dao-trunk)
</connection>

<developerConnection>
scm:svn:http://svn.baidu.com/banseon/maven/banseon/dao-trunk
</developerConnection>

<tag/>

<url>http://svn.baidu.com/banseon</url>
</scm>

<organization>

<name>demo</name>

<url>http://www.erhuowang.cn</url>
</organization>

<build>

<sourceDirectory/>

<scriptSourceDirectory/>

<testSourceDirectory/>

<outputDirectory/>

<testOutputDirectory/>

<extensions>

<extension>

<groupId/>

<artifactId/>

<version/>
</extension>
</extensions>

<defaultGoal/>

<resources>

<resource>

<targetPath/>

<filtering/>

<directory/>

<includes/>

<excludes/>
</resource>
</resources>

<testResources>

<testResource>
<targetPath/><filtering/><directory/><includes/><excludes/>
</testResource>
</testResources>

<directory/>

<finalName/>

<filters/>

<pluginManagement>

<plugins>

<plugin>

<groupId/>

<artifactId/>

<version/>

<extensions/>

<executions>

<execution>

<id/>

<phase/>

<goals/>

<inherited/>

<configuration/>
</execution>
</executions>

<dependencies>

<dependency>
......
</dependency>
</dependencies>

<inherited/>

<configuration/>
</plugin>
</plugins>
</pluginManagement>

<plugins>

<plugin>
<groupId/><artifactId/><version/><extensions/>
<executions>
<execution>
<id/><phase/><goals/><inherited/><configuration/>
</execution>
</executions>
<dependencies>

<dependency>
......
</dependency>
</dependencies>
<goals/><inherited/><configuration/>
</plugin>
</plugins>
</build>

<profiles>

<profile>

<id/>

<activation>

<activeByDefault/>

<jdk/>

<os>

<name>Windows XP</name>

<family>Windows</family>

<arch>x86</arch>

<version>5.1.2600</version>
</os>

<property>

<name>mavenVersion</name>

<value>2.0.3</value>
</property>

<file>

<exists>/usr/local/hudson/hudson-home/jobs/maven-guide-zh-to-production/workspace/</exists>

<missing>/usr/local/hudson/hudson-home/jobs/maven-guide-zh-to-production/workspace/</missing>
</file>
</activation>

<build>
<defaultGoal/>
<resources>
<resource>
<targetPath/><filtering/><directory/><includes/><excludes/>
</resource>
</resources>
<testResources>
<testResource>
<targetPath/><filtering/><directory/><includes/><excludes/>
</testResource>
</testResources>
<directory/><finalName/><filters/>
<pluginManagement>
<plugins>

<plugin>
<groupId/><artifactId/><version/><extensions/>
<executions>
<execution>
<id/><phase/><goals/><inherited/><configuration/>
</execution>
</executions>
<dependencies>

<dependency>
......
</dependency>
</dependencies>
<goals/><inherited/><configuration/>
</plugin>
</plugins>
</pluginManagement>
<plugins>

<plugin>
<groupId/><artifactId/><version/><extensions/>
<executions>
<execution>
<id/><phase/><goals/><inherited/><configuration/>
</execution>
</executions>
<dependencies>

<dependency>
......
</dependency>
</dependencies>
<goals/><inherited/><configuration/>
</plugin>
</plugins>
</build>

<modules/>

<repositories>

<repository>
<releases>
<enabled/><updatePolicy/><checksumPolicy/>
</releases>
<snapshots>
<enabled/><updatePolicy/><checksumPolicy/>
</snapshots>
<id/><name/><url/><layout/>
</repository>
</repositories>

<pluginRepositories>

<pluginRepository>
<releases>
<enabled/><updatePolicy/><checksumPolicy/>
</releases>
<snapshots>
<enabled/><updatePolicy/><checksumPolicy/>
</snapshots>
<id/><name/><url/><layout/>
</pluginRepository>
</pluginRepositories>

<dependencies>

<dependency>
......
</dependency>
</dependencies>

<reports/>

<reporting>
......
</reporting>

<dependencyManagement>
<dependencies>

<dependency>
......
</dependency>
</dependencies>
</dependencyManagement>

<distributionManagement>
......
</distributionManagement>

<properties/>
</profile>
</profiles>

<modules/>

<repositories>

<repository>

<releases>

<enabled/>

<updatePolicy/>

<checksumPolicy/>
</releases>

<snapshots>
<enabled/><updatePolicy/><checksumPolicy/>
</snapshots>

<id>banseon-repository-proxy</id>

<name>banseon-repository-proxy</name>

<url>http://192.168.1.169:9999/repository/</url>

<layout>default</layout>
</repository>
</repositories>

<pluginRepositories>

<pluginRepository>
......
</pluginRepository>
</pluginRepositories>

<!--該元素描述了項目相關的所有依賴竞穷。 這些依賴組成了項目構建過程中的一個個環(huán)節(jié)唐责。它們自動從項目定義的倉庫中下載。要獲取更多信息瘾带,請看項目依賴機制鼠哥。-->     
<dependencies>     
    <dependency>    


<groupId>org.apache.maven</groupId>

<artifactId>maven-artifact</artifactId>

<version>3.8.1</version>

<type>jar</type>

<classifier></classifier>

<scope>test</scope>

<systemPath></systemPath>

<exclusions>
<exclusion>
<artifactId>spring-core</artifactId>
<groupId>org.springframework</groupId>
</exclusion>
</exclusions>

<optional>true</optional>
</dependency>
</dependencies>

<reports></reports>

<reporting>

<excludeDefaults/>

<outputDirectory/>

<plugins>

<plugin>

<groupId/>

<artifactId/>

<version/>

<inherited/>

<configuration/>

<reportSets>

<reportSet>

<id/>

<configuration/>

<inherited/>

<reports/>
</reportSet>
</reportSets>
</plugin>
</plugins>
</reporting>

<dependencyManagement>
<dependencies>

<dependency>
......
</dependency>
</dependencies>
</dependencyManagement>

<distributionManagement>

<repository>

<uniqueVersion/>
<id>banseon-maven2</id>
<name>banseon maven2</name>
<url>file://${basedir}/target/deploy</url>
<layout/>
</repository>

<snapshotRepository>
<uniqueVersion/>
<id>banseon-maven2</id>
<name>Banseon-maven2 Snapshot Repository</name>
<url>scp://svn.baidu.com/banseon:/usr/local/maven-snapshot</url>
<layout/>
</snapshotRepository>

<site>

<id>banseon-site</id>

<name>business api website</name>

<url>
scp://svn.baidu.com/banseon:/var/www/localhost/banseon-web
</url>
</site>

<downloadUrl/>

<relocation>

<groupId/>

<artifactId/>

<version/>

<message/>
</relocation>

<status/>
</distributionManagement>

<properties/>
</project>

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市看政,隨后出現(xiàn)的幾起案子朴恳,更是在濱河造成了極大的恐慌,老刑警劉巖允蚣,帶你破解...
    沈念sama閱讀 206,378評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件于颖,死亡現(xiàn)場離奇詭異,居然都是意外死亡嚷兔,警方通過查閱死者的電腦和手機森渐,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,356評論 2 382
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來冒晰,“玉大人同衣,你說我怎么就攤上這事◆婕簦” “怎么了乳怎?”我有些...
    開封第一講書人閱讀 152,702評論 0 342
  • 文/不壞的土叔 我叫張陵,是天一觀的道長前弯。 經常有香客問我蚪缀,道長,這世上最難降的妖魔是什么恕出? 我笑而不...
    開封第一講書人閱讀 55,259評論 1 279
  • 正文 為了忘掉前任询枚,我火速辦了婚禮,結果婚禮上浙巫,老公的妹妹穿的比我還像新娘金蜀。我一直安慰自己刷后,他們只是感情好,可當我...
    茶點故事閱讀 64,263評論 5 371
  • 文/花漫 我一把揭開白布渊抄。 她就那樣靜靜地躺著尝胆,像睡著了一般。 火紅的嫁衣襯著肌膚如雪护桦。 梳的紋絲不亂的頭發(fā)上含衔,一...
    開封第一講書人閱讀 49,036評論 1 285
  • 那天,我揣著相機與錄音二庵,去河邊找鬼贪染。 笑死,一個胖子當著我的面吹牛催享,可吹牛的內容都是我干的杭隙。 我是一名探鬼主播,決...
    沈念sama閱讀 38,349評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼因妙,長吁一口氣:“原來是場噩夢啊……” “哼痰憎!你這毒婦竟也來了?” 一聲冷哼從身側響起攀涵,我...
    開封第一講書人閱讀 36,979評論 0 259
  • 序言:老撾萬榮一對情侶失蹤信殊,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后汁果,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經...
    沈念sama閱讀 43,469評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡玲躯,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 35,938評論 2 323
  • 正文 我和宋清朗相戀三年据德,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片跷车。...
    茶點故事閱讀 38,059評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡棘利,死狀恐怖,靈堂內的尸體忽然破棺而出朽缴,到底是詐尸還是另有隱情善玫,我是刑警寧澤,帶...
    沈念sama閱讀 33,703評論 4 323
  • 正文 年R本政府宣布密强,位于F島的核電站茅郎,受9級特大地震影響,放射性物質發(fā)生泄漏或渤。R本人自食惡果不足惜系冗,卻給世界環(huán)境...
    茶點故事閱讀 39,257評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望薪鹦。 院中可真熱鬧掌敬,春花似錦惯豆、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,262評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至华临,卻和暖如春芯杀,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背银舱。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評論 1 262
  • 我被黑心中介騙來泰國打工瘪匿, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人寻馏。 一個月前我還...
    沈念sama閱讀 45,501評論 2 354
  • 正文 我出身青樓棋弥,卻偏偏與公主長得像,于是被迫代替她去往敵國和親诚欠。 傳聞我的和親對象是個殘疾皇子顽染,可洞房花燭夜當晚...
    茶點故事閱讀 42,792評論 2 345

推薦閱讀更多精彩內容

  • 一、為什么使用Maven這樣的構建工具【why】 ① 一個項目就是一個工程 如果項目非常龐大轰绵,就不適合使用pack...
  • 官方文檔鏈接地址:http://docs.spring.io/spring-boot/docs/1.3.0.BUI...
    _fan凡閱讀 26,337評論 0 3
  • 首先說明粉寞,本人并不是第一次學習maven,也不是第二次學習maven左腔,為什么還要來學習寫下這些東西唧垦?是因為之前一直...
    渭小粉閱讀 408評論 0 1
  • 可愛飛翔,大國重器液样。國之利器振亮,尋找飛翔。云霄成長鞭莽,努力進取坊秸。導彈飛翔,武器遨游澎怒。努力進取褒搔,孤獨幻想。找尋雨傘喷面,沉默...
    趙原野閱讀 127評論 0 0
  • 《白蛇傳》是豫劇皇后星瘾、陳派藝術創(chuàng)始人陳素真大師的早期代表劇目之一,改編自中國民間愛情傳說惧辈,講述峨眉蛇仙白素貞與許仙...
    醉清風_于叢洋閱讀 613評論 0 4