Maven是什么
Apache Maven是一个软件项目管理和综合工具,基于项目对象模型(POM)的概念,Maven可以从一个中心资料片管理项目构建,报告和文件.
- Maven提供给开发人员构建一个完整生命周期框架.开发团队可以自动完成项目的基础工具建设,Maven使用标准的目录结构和默认构建生命周期.
- 在多个开发团队环境时,Maven可以设置按标准在非常短的时间里完成配置工作.由于大部分项目的设置都很简单,并且可重复使用,Maven让开发人员的工作更轻松,同时创建报表,检查,构建和测试自动化设置.
- Maven提供了开发人员的方式来管理:
- Builds
- Documentation
- Reporting
- Dependencies
- SCMs
- Releases
- Distribution
- mailing list
- 概括地说,Maven简化和标准化项目建设过程.处理编译,分配,文档,团队协作和其他任务的无缝连接.Maven增加可重用性并负责建立相关的任务.
Maven目标
Maven主要目标是提供给开发人员:
- 项目是可重复使用,易维护,更容易理解的一个综合模型
- 插件或交互的工具,这种声明性的模式
Maven项目的结构和内容在一个XML文件中声明,pom.xml 项目对象模型(POM),这是整个Maven系统的基本单元.有关详细信息,请参阅Maven POM的部分.
Apache Maven 是一种创新的软件项目管理工具,提供了一个项目对象模型(POM)文件的新概念来管理项目的构建,相关性和文档.最强大的功能就是能够自动下载项目依赖库.
Maven启用代理访问
-
找到文件
{M2_HOME}/conf/settings.xml
-
找到下列代码:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21<!-- proxies
| This is a list of proxies which can be used on this machine to connect to the network.
| Unless otherwise specified (by system property or command-line switch), the first proxy
| specification in this list marked as active will be used.
|-->
<proxies>
<!-- proxy
| Specification for one proxy, to be used in connecting to the network.
|
<proxy>
<id>optional</id>
<active>true</active>
<protocol>http</protocol>
<username>proxyuser</</username>
<password>proxypass</password>
<host>proxy.host.net</host>
<port>80</port>
<nonProxyHosts>local.net|some.host.com</nonProxyHosts>
</proxy>
-->
</proxies> -
修改将上述代码,设置代理服务器
Maven本地资源库
Maven的本地资源库是用来存储所有项目的依赖关系(插件jar和其他文件,这些文件被Maven下载)到本地文件夹.
更新Maven的本地库
-
找到文件
{M2_HOME}/conf/settings.xml
-
修改如下代码:
1
2
3
4
5
6<settings><!-- localRepository
| The path to the local repository maven will use to store artifacts.
|
| Default: ~/.m2/repository
<localRepository>/path/to/local/repo</localRepository>
--><localRepository>D:\software\apache-maven\repository</localRepository>
Maven中央储存库
当你建立一个 Maven 的项目,Maven 会检查你的 pom.xml 文件,以确定哪些依赖下载.首先,Maven 将从本地资源库获得 Maven 的本地资源库依赖资源,如果没有找到,然后把它会从默认的 Maven 中央存储库 查找下载.
从Maven远程存储库下载
Maven的依赖库查询顺序:
-
在 Maven 本地资源库中搜索,如果没有找到,进入第 2 步,否则退出
-
在 Maven 中央存储库搜索,如果没有找到,进入第 3 步,否则退出
-
在给定url的远程存储库搜索,如果没有找到,提示错误信息,否则退出
给定URL的远程库
1 | <repositories> |
如果不注明version, maven将保持包是最新版本
定制库到Maven本地资源库
将本地的jar包导入到Maven本地资源库(以kaptcha为例):
-
找到kaptcha jar包所在位置
-
使用mvn命令安装到本地资源库:
1
mvn install:install-file -Dfile=c:\kaptcha-{version}.jar -DgroupId=com.google.code -DartifactId=kaptcha -Dversion={version} -Dpackaging=jar
示例:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18D:\>mvn install:install-file -Dfile=c:\kaptcha-2.3.jar -DgroupId=com.google.code
-DartifactId=kaptcha -Dversion=2.3 -Dpackaging=jar
[INFO] Scanning for projects...
[INFO] Searching repository for plugin with prefix: 'install'.
[INFO] ------------------------------------------------------------------------
[INFO] Building Maven Default Project
[INFO] task-segment: [install:install-file] (aggregator-style)
[INFO] ------------------------------------------------------------------------
[INFO] [install:install-file]
[INFO] Installing c:\kaptcha-2.3.jar to
D:\maven_repo\com\google\code\kaptcha\2.3\kaptcha-2.3.jar
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESSFUL
[INFO] ------------------------------------------------------------------------
[INFO] Total time: < 1 second
[INFO] Finished at: Tue May 12 13:41:42 SGT 2014
[INFO] Final Memory: 3M/6M
[INFO] ------------------------------------------------------------------------ -
安装完毕后,就在pom.xml中声明kaptcha的坐标:
1
2
3
4
5<dependency>
<groupId>com.google.code</groupId>
<artifactId>kaptcha</artifactId>
<version>2.3</version>
</dependency>
Maven依赖关系中Scope的作用
主要管理依赖的部署,目前scope可以有五个值:
- **compile:**缺省值,适用于所有阶段,会随项目一期发布
- **provided:**类似compile,期望JDK,容器或使用者会提供这个依赖
- **runtime:**只在运行时使用,如JDBC驱动,适用于运行和测试阶段
- **test:**只在测试时使用,用于编译和运行测试代码,不会随项目发布
- **system:**类似provided,需要显式提供包含依赖的jar,Maven不会在Repository中查找它
使用
Run as -> Maven install
Run as -> Maven build... -> clean tomcat7:run