安装
下载 Maven :http://maven.apache.org/download.html
设置环境变量:path中添加 C:\apache-maven-3.0.5\bin;
验证是否安装成功 mvn --version
pom.xml样板,所有的maven项目都会继承超级pom.xml,*\maven\project\pom-4.0.0.xml。
4.0.0
com.tmg
performance
war
1.0.1
performance Maven Webapp
http://maven.apache.org
2.3.15.2
3.2.8.RELEASE
3.2.4.RELEASE
3.6.0.Final
1.3.1
yyyy-MM-dd
-${project.version}-${maven.build.timestamp}
commons-io
commons-io
2.4
commons-fileupload
commons-fileupload
1.3.1
com.google.code.gson
gson
2.2.2
xml-apis
xml-apis
1.4.01
org.apache.poi
poi
3.10-FINAL
org.apache.poi
poi-ooxml
3.10-FINAL
net.sourceforge.htmlunit
htmlunit
2.13
org.jsoup
jsoup
1.6.3
junit
junit
3.8.1
test
org.jasig.cas.client
cas-client-core
3.2.1
org.springframework.security
spring-security-core
${spring.secutity.version}
org.springframework.security
spring-security-cas
${spring.secutity.version}
org.springframework.security
spring-security-config
${spring.secutity.version}
oro
oro
2.0.8
org.springframework
spring-core
${spring.version}
org.springframework
spring-context
${spring.version}
org.springframework
spring-beans
${spring.version}
org.springframework
spring-web
${spring.version}
org.springframework
spring-orm
${spring.version}
org.springframework.batch
spring-batch-core
2.1.7.RELEASE
org.springframework.batch
spring-batch-infrastructure
2.1.7.RELEASE
org.springframework
spring-support
2.0.8
org.quartz-scheduler
quartz
1.8.5
cglib
cglib
2.2.2
org.springframework
spring-context-support
${spring.version}
net.sf.ehcache
ehcache
2.7.4
org.hibernate
hibernate-c3p0
${hibernate.version}
org.hibernate
hibernate-search
3.4.2.Final
org.hibernate
hibernate-validator
5.0.1.Final
commons-dbcp
commons-dbcp
1.4
commons-lang
commons-lang
2.6
javax.annotation
javax.annotation-api
1.2
org.aspectj
aspectjtools
1.6.11
org.aspectj
aspectjrt
1.6.11
org.aspectj
aspectjlib
1.6.2
org.aspectj
aspectjweaver
1.6.11
commons-net
commons-net
2.2
org.apache.struts
struts2-core
${struts.version}
com.sun
tools
org.apache.struts
struts2-spring-plugin
${struts.version}
org.apache.struts
struts2-convention-plugin
${struts.version}
org.apache.struts
struts2-json-plugin
${struts.version}
javax.servlet
jstl
1.2
taglibs
standard
1.1.2
javax.servlet
javax.servlet-api
3.0.1
provided
javax.mail
javax.mail-api
1.5.0
org.slf4j
slf4j-log4j12
1.7.5
org.apache.poi
poi-scratchpad
3.9
mysql
mysql-connector-java
5.0.8
org.mybatis
mybatis
3.1.1
org.mybatis
mybatis-spring
1.2.2
org.mybatis.caches
mybatis-memcached
1.0.0
org.apache.httpcomponents
httpclient
4.3.3
net.sf.json-lib
json-lib
2.4
jdk15
commons-beanutils
commons-beanutils
1.9.1
com.tmg
support
0.0.1-SNAPSHOT
performance
org.apache.maven.plugins
maven-compiler-plugin
2.3.2
1.6
true
lines,vars,source
UTF-8
maven-war-plugin
org.apache.maven.plugins
2.1.1
maven-assembly-plugin
2.2
webapp
package
single
performance
false
src/main/assembly/webapp.xml
仓库
查找顺序为一下三个仓库依次查找
- 本地仓库
Maven 本地仓库是机器上的一个文件夹,保存了你的工程的所有依赖(library jar、plugin jar 等)。当你运行一次 Maven 构建,Maven 会自动下载所有依赖的 jar 文件到本地仓库中。它避免了每次构建时都引用存放在远程机器上的依赖文件。
要修改默认位置,在 conf 目录中的 Maven 的 settings.xml 文件中定义另一个路径。E:/myrepo - 中央仓库
Maven 中央仓库是由 Maven 社区提供的仓库,其中包含了大量常用的库。这个仓库由 Maven 社区管理。不需要配置(已经在超级pom中配置)。需要通过网络才能访问。查找中央仓库。 -
远程仓库
它是开发人员自己定制仓库,包含了所需要的代码库或者其他工程中用到的 jar 文件,包括一些自己写的(在中央仓库中获取不到的)jar 文件,在pom中设置远程仓库(私服)。如有需要记得将repository的snapshots属性改为true。
自动发布构件到远程仓库
setting.xml中配置私服的用户名密码,id与pom.xml中一致
mvn deploy后,所部署的包就自动上传到了nexus。
镜像
如果你的地理位置附近有一个速度更快的central镜像,或者你想覆盖central仓库配置,你可以使用settings.xml中的mirror配置。以下的mirror配置用maven.net.cn覆盖了Maven自带的central(中央仓库)。
我们也可以配置一个所有仓库的镜像,以保证该镜像是Maven唯一使用的仓库,
*
。镜像会覆盖超级pom中id为central的中央库。
参考Maven最佳实践
依赖的重复
项目----A---C----D
项目----B---D
也就是说,当前项目引入了2次D依赖,那么这时,Maven将采用路径最近原则,在路径一样时采用声明先后原则
模块划分
一个简单的Maven模块结构是这样的:
---- app-parent
|-- pom.xml (pom)
|
|-- app-util
| |-- pom.xml (jar)
|
|-- app-dao
| |-- pom.xml (jar)
|
|-- app-service
| |-- pom.xml (jar)
|
|-- app-web
|-- pom.xml (war)
这些模块的依赖关系如下:
app-dao --> app-util
app-service --> app-dao
app-web --> app-service
注意依赖的传递性,app-web依赖于app-dao,app-util。
特殊的地方在于,这里的packaging为pom。所有带有子模块的项目的packaging都为pom。
packaging如果不进行配置,它的默认值是jar。groupId和version默认从父模块继承了。
app-dao依赖于app-util。这里要注意的是version的值为${project.version},这个值是一个属性引用,指向了POM的project/version的值。
web模块是显示声明打成war包的。最后我们在 app-parent 根目录中运行 mvn clean install,build整个项目,Maven根据我们的依赖配置,智能的安排了顺序,app-util, app-dao, app-service, app-web。最后,你可以在 app-web/target 目录下找到文件 app-web-1.0-SNAPSHOT.war
父pom.xml的
作用:当子类不需要父pom中的某些依赖的时(别的子类需要),就可以使用。被
可以省略version等其他配置,因为父pom中已经配置过了,若想获取父pom中所有的dependencyManagement中的构件配置,则在子pom中如下配置
插件
Maven实际上是一个执行插件的框架,其所有的任务其实都是由插件完成。一个插件通常提供一系列的目标操作,并且目标操作可以通过以下格式的命令执行:mvn [插件名]:[目标操作名]
。例如,一个Java项目可以通过运行下面的命令使用maven-compiler-plugin的compile目标操作编译。mvn compiler:compile
类型 | 描述 |
---|---|
构建插件(Build plugins) | 这类插件在构建过程中执行,并且应该配置在pom.xml文件的 |
报告插件(Reporting plugins) | 这类插件在生成站点过程中执行,并且应该配置在pom.xml文件的 |
下面是一些常用的插件的列表:
- clean 构建完成后清理目标,删除目标目录。
- compiler 编译Java源文件。
- surefile 运行JUnit单元测试,生成测试报告。
- jar 从当前项目生成JAR文件。
- war 从当前项目生成WAR文件。
- javadoc 生成项目的Javadoc。
- antrun 运行任意指定构建阶段的一系列ant任务。
要点:
重复依赖时,Maven将采用路径最近原则,在路径一样时采用声明先后原则。
查找仓库的顺序为:本地仓库(在maven的setting.xml中配置),中央仓库(不需要配置),私库(如nexus)。