maven史上最全记录

转载自:
https://blog.csdn.net/u010425776/article/details/52027706
什么是Maven?
如今我们构建一个项目需要用到很多第三方的类库,如写一个使用Spring的Web项目就需要引入大量的jar包。一个项目Jar包的数量之多往往让我们瞠目结舌,并且Jar包之间的关系错综复杂,一个Jar包往往又会引用其他Jar包,缺少任何一个Jar包都会导致项目编译失败。
以往开发项目时,程序员往往需要花较多的精力在引用Jar包搭建项目环境上,而这一项工作尤为艰难,少一个Jar包、多一个Jar包往往会报一些让人摸不着头脑的异常。
而Maven就是一款帮助程序员构建项目的工具,我们只需要告诉Maven需要哪些Jar 包,它会帮助我们下载所有的Jar,极大提升开发效率。

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

Maven规定的目录结构
若要使用Maven,那么项目的目录结构必须符合Maven的规范,其目录结构如下:

Maven基本命令
-v:查询Maven版本
本命令用于检查maven是否安装成功。
Maven安装完成之后,在命令行输入mvn -v,若出现maven信息,则说明安装成功。

compile:编译
将java源文件编译成class文件

test:测试项目
执行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中是不存在依赖冲突的。

短路优先
本项目——>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。

声明优先
若引用路径长度相同时,在pom.xml中谁先被声明,就使用谁。
聚合
什么是聚合?
将多个项目同时运行就称为聚合。

如何实现聚合?
只需在pom中作如下配置即可实现聚合:

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

1
2
3
4
5
继承
什么是继承?
在聚合多个项目时,如果这些被聚合的项目中需要引入相同的Jar,那么可以将这些Jar写入父pom中,各个子项目继承该pom即可。

如何实现继承?

父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
若出现如下界面,表示成功!

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>

<!--该元素描述了项目相关的所有依赖。 这些依赖组成了项目构建过程中的一个个环节。它们自动从项目定义的仓库中下载。要获取更多信息,请看项目依赖机制。-->     
<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>

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 205,033评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,725评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,473评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,846评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,848评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,691评论 1 282
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,053评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,700评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,856评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,676评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,787评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,430评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,034评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,990评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,218评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,174评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,526评论 2 343

推荐阅读更多精彩内容

  • 一、为什么使用Maven这样的构建工具【why】 ① 一个项目就是一个工程 如果项目非常庞大,就不适合使用pack...
    问题_解决_分享_讨论_最优阅读 1,240评论 0 16
  • 官方文档链接地址:http://docs.spring.io/spring-boot/docs/1.3.0.BUI...
    _fan凡阅读 26,331评论 0 3
  • 首先说明,本人并不是第一次学习maven,也不是第二次学习maven,为什么还要来学习写下这些东西?是因为之前一直...
    渭小粉阅读 408评论 0 1
  • 可爱飞翔,大国重器。国之利器,寻找飞翔。云霄成长,努力进取。导弹飞翔,武器遨游。努力进取,孤独幻想。找寻雨伞,沉默...
    赵原野阅读 127评论 0 0
  • 《白蛇传》是豫剧皇后、陈派艺术创始人陈素真大师的早期代表剧目之一,改编自中国民间爱情传说,讲述峨眉蛇仙白素贞与许仙...
    醉清风_于丛洋阅读 611评论 0 4