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包的坐标。


ch.qos.logback
logback-classic
1.1.1

1
2
3
4
5
groupId:所需Jar包的项目名
artifactId:所需Jar包的模块名
version:所需Jar包的版本号
传递依赖 与 排除依赖
传递依赖:如果我们的项目引用了一个Jar包,而该Jar包又引用了其他Jar包,那么在默认情况下项目编译时,Maven会把直接引用和简洁引用的Jar包都下载到本地。
排除依赖:如果我们只想下载直接引用的Jar包,那么需要在pom.xml中做如下配置:(将需要排除的Jar包的坐标写在中)


ch.qos.logback
logback-classic


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中作如下配置即可实现聚合:


    ../模块1
    ../模块2
    ../模块3

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

如何实现继承?

父pom配置:将需要继承的Jar包的坐标放入标签即可。



org.apache.shiro
shiro-spring
1.2.2



1
2
3
4
5
6
7
8
9
子pom配置:

父pom所在项目的groupId
父pom所在项目的artifactId
父pom所在项目的版本号

1
2
3
4
5
使用Maven构建Web项目
New Maven项目:选择WebApp:

若使用JSP,需添加Servlet依赖:
注:Servlet依赖只在编译和测试时使用!


javax.servlet
javax.servlet-api
3.0.1

provided

1
2
3
4
5
6
7
在Bulid Path中设置resource输出目录:

勾选:Dynamic Web Module

删掉测试目录

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


    
        org.apache.maven.plugins
        maven-compiler-plugin
        
            1.8
            1.8
        
    

    
        org.eclipse.jetty
        jetty-maven-plugin
        9.3.10.v20160621
        
            
                package
            
        
    

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包。

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">












4.0.0

cn.erhuowang

erhuowang-maven2

war

1.0-SNAPSHOT

erhuo-maven

http://erhuowang.cn

A maven project to study maven.








erhuowang

http://erhuowang.cn



































Demo

[email protected]

[email protected]

[email protected]

[email protected]







HELLO WORLD

chaimm

[email protected]




Project Manager
Architect


demo

http://erhuowang.cn


No


-5














Apache 2

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

repo

A business-friendly OSS license






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



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




http://svn.baidu.com/banseon




demo

http://www.erhuowang.cn


























































































......






















......



















Windows XP

Windows

x86

5.1.2600




mavenVersion

2.0.3




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

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





























......


















......






































......






......






......





......

























banseon-repository-proxy

banseon-repository-proxy

http://192.168.1.169:9999/repository/

default






......

     
     
        


org.apache.maven

maven-artifact

3.8.1

jar



test





spring-core
org.springframework



true














































......









banseon-maven2
banseon maven2
file://${basedir}/target/deploy





banseon-maven2
Banseon-maven2 Snapshot Repository
scp://svn.baidu.com/banseon:/usr/local/maven-snapshot





banseon-site

business api website


scp://svn.baidu.com/banseon:/var/www/localhost/banseon-web




















你可能感兴趣的:(maven史上最全记录)