Maven是一个跨平台项目管理工具,是使用Java语言开发的,可以对 Java 项目进行构建、依赖管理。当然Maven 也可被用于构建和管理各种项目,例如 C#,Ruby,Scala和其他语言编写的项目。
依赖管理可以理解为jar包的管理
项目构建包括以下几个环节:清理、编译、测试、报告、打包、部署。构建项目的方式有以下几种:
官网:http://maven.apache.org
maven官方压缩包的目录结构
MAVEN_HOME
和path
)]
mvn -v
.m2/repository
中。localRepository
标签,指定仓库位置。mvn help:system
命令,则自动生成.m2目录.默认maven的jdk编译版本不是自己安装的1.8版本。需要进行版本配置,修改settings.xml如下:
jdk-1.8
true
1.8
1.8
1.8
1.8
镜像就相当于是中央仓库的一个副本,内容和中央仓库完全一样,目前有不少国内镜像,其中阿里云算是比较稳定的,同时也能保证下载速度。
修改settings.xml如下:
alimaven
aliyun maven
http://maven.aliyun.com/nexus/content/groups/public/
central
至此Maven的环境配置已经完成。
在maven中存在"三套"生命周期,每一套生命周期相互独立,互不影响。在一套生命周期内,执行后面的命令则前面操作会自动执行。
POM(
Project Object Model
,项目对象模型 ) 是 Maven 工程的基本工作单元,是一个XML文件,包含了项目的基本信息,用于描述项目如何构建,声明项目依赖,等等。
POM 标签大全详解(来自菜鸟教程http://www.runoob.com)
4.0.0
asia.banseon
banseon-maven2
jar
1.0-SNAPSHOT
banseon-maven
http://www.baidu.com/banseon
A maven project to study maven.
jira
http://jira.baidu.com/banseon
Demo
[email protected]
[email protected]
[email protected]
http:/hi.baidu.com/banseon/demo/dev/
HELLO WORLD
banseon
[email protected]
Project Manager
Architect
demo
http://hi.baidu.com/banseon
No
-5
Apache 2
http://www.baidu.com/banseon/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.baidu.com/banseon
......
......
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
在工程之中需要依赖各种各样的jar包,也可能需要依赖其他的maven工程打包好的包。这个时候就需要在pom.xml中使用依赖关系进行配置。例如:
com.bjsxt
HelloMaven
0.0.1-SNAPSHOT
继承为了消除重复,我们把很多相同的配置提取出来。所以,maven提供了一个父类maven项目(新建类型为pom
的maven工程Parent)来装所有公共使用的jar,只要继承都可以使用
groupA
artifactA
1.0
当然也可以选择性继承,但是父项目的配置的依赖需要配置在dependencyManagement
中
......
在子项目的dependency
标签中,不配置version
,就会到父项目的dependencyManagement
中去找相关依赖
groupA
artifactA
1.0
com.bjsxt
HelloMaven
拆分:将每一层代码放到一个工程里面,降低耦合度,提高可复用性,为其他工程依赖。然后对拆分后的项目进行聚合
如果我们想一次构建多个项目模块,那我们就需要对多个项目模块进行聚合,这样做,我们只需要对父工程进行mvn的install
命令,它就会依次把继承依赖的所有工程都自动执行mvn的invalid
、compile
、test
、package
、verify
(验证)、install
命令了。
创建好的父工程目录中只有pom.xml,可以判断出父工程不进行编码。
父工程的作用: 项目需要的依赖信息在父工程的pom文件中定义,子模块继承即可将子模块聚合到一起
在父项目中通过Module标签,将子项目聚合到一起,子项目创建选择的是Maven module,同时指定父项目
maven-pojo
maven-service
maven-mapper
maven-controller
依赖范围scope(compile\test\provided\runtime
)
说明:如果使用到tomcat自带jar包,将项目中依赖范围设置成provided
maven项目可以在本地tomcat中运行,也可以在pom.xml中添加tomcat插件,配置插件内容,并运行。编写一个jsp页面,查看运行效果。
org.apache.tomcat.maven
tomcat7-maven-plugin
2.1
8080
/
UTF-8
tomcat7
zip、tar.gz、tar.bz2、jar、dir、war
等等bin
和conf
文件夹复制到新建的assembly文件夹..tar.gz
的文件.bin/startup.bat
即可bin/startup.sh
、linux系统中停止使用,解压后运行bin/stop.sh
pom.xml配置信息
maven-assembly-plugin
assembly/assembly.xml
make-assembly
package
single
assembly.xml配置信息
assembly
tar.gz
true
assembly/bin
bin
0755
assembly/conf
conf
0644
lib
1、我从SVN上下载了一个以Maven构建的工程,下载完毕没有jar包怎么办?
从资源库上下载下来的Maven工程,是没有jar包的,此时可以这么做:
(1)删除Maven工程,但是删除的时候不要删除本地工程里面的Maven工程,只删除MyEclipse中的Maven工程
(2)右键Import->Maven4MyEclipse->Existing Maven Projects,导入你的Maven工程,此时MyEclipse在构建工程的时候,假如你的本地仓库中没有dependcy中的jar包,便会去远程仓库下载jar包到本地仓库中。你的工程导入完毕之后,Library应该是这样的:
2、重新下载Maven工程所依赖的jar包、导入jar包都需要触发Maven工程的build workspace,那么如何才能触发Maven工程的build workspace?
找到一个pom.xml,随便修改一下,加一个空格、减一个空格什么的,ctrl+s
保存一下,便会触发Maven工程的build workspace了
3、本地仓库的目录结构是什么样子的?
groupId
、artifactId
、version
确定一个唯一的Maven,比方说我有一个mybatis的dependcy:
org.mybatis
mybatis
3.2.5
那么mybatis的jar包应该在%Maven仓库地址%\org\mybatis\mybatis\3.2.5\这一路径下,看到了吧,先groupId,再artifactId,最后version,每个名字都是一个文件夹的名字
4、有些jar包在dependcy里面有配置,Import了Maven工程,下载完工程所依赖的jar包之后,发现本地仓库里面却没有,怎么办?
可能是原先下载jar包的时候出了什么问题,从artifactId目录开始删除以下的所有文件/文件夹,然后触发一次Maven工程的build workspace就可以了
5、本地仓库中确定已经有jar包了,工程里面却报错,说找不到jar包,该怎么办?
应该有很多解决办法,目前解决的一种办法是,MyEclipse->Window->Preferences->搜索Maven->User Settings,Update Settings和Reindex点一下就好了。或者Eclipse的Maven->update
,另外,可以尝试一下把本地Maven仓库内的jar包删除一下,然后重新build workspace
,可能也可以。
6.发生了依赖冲突
在导致冲突的dependency
标签里面,加入如下内容
example
example
然后这个dependency就不会去把被exclude的东西放进来了。
如果你不知道冲突在哪,pom.xml选择时点击,Dependency Hierarchy
可以看到依赖关系,在intellij中,右击这个dependency,菜单中的Maven->Show Dependecies中也可以看到依赖图(这个图上也可以选中然后右击菜单选exclude
)。