搜索
您的当前位置:首页正文

maven基础知识

来源:小奈知识网
Maven介绍

1) 即“accumulator of knowledge”,知识累加器

2) 作用:a standard way to build the projects, a clear definition of what the project consisted

of, an easy way to publish project information and a way to share JARs across several projects.按照标准构建项目、发布项目并支持跨项目共享jar包 3) 目的:使开发人员最短时间理解项目

*making the build process easy使构建更加容易

屏蔽大量细节信息,但仍然未删除必要的信息

*providing a uniform build system提供一个统一的构建系统

project object model (POM) and a set of plugins that are shared by all projects 即使用项目对象模型(POM)和项目共享的插件集

*providing quality project information提供优质项目信息 POM和源码信息及使用插件

*Providing guidelines for best practices development 提供最佳开发实践的指导 协助项目工作流程、生命周期、测试发布管理和问题跟踪,布局项目目录 *allowing transparent migration to new features 允许透明的迁移到新特性 安装新的或者更新插件已经依赖管理的工作由maven负责

配置plug-ins

1) 构建插件(Build plugins)+报告插件(Reporting plugins):

2) 插件最少需要包含信息:groupId, artifactId and version

Pom的dtd链接http://maven.apache.org/ref/3.0.3/maven-model/maven.html 3) 配置对象类似于xstream. 4) 配置插件

:子标签指定执行条件,未指定则为没默认条件下执行,如果默

认条件未设置则不执行

:管理插件依赖关系

:默认值为true,即被子pom继承 5) 配置插件:

安装maven

1) 2) 3) 4) 5) 6) 7)

下载maven,主要版本3.0.3/2.2.1/2.0.11

环境要求:jdk1.5以上+Memory+Disk(>100M)+OS(Windows xp/7或者Mac OS) 将下载包unzip,放置到指定的目录m2_path下

将M2_HOME添加到环境变量中,设置为上一步指定的目录

设置M2=%M2_HOME%\\bin,设置MAVEN_OPTS=-Xms 256m –Xmx 512m(可选) 环境变量Path中添加%M2%

设置JAVA_HOME并将%JAVA_HOME%\\bin添加到Path中

8) 输入命令mvn –version检查是否安装成功

M2E-eclipse的maven插件

特性:

1) 从SCM签出项目

2) 利用预定义Archetype创建项目 3) 创建Maven模块 4) 导入Maven项目

5) m2eclipse有POM编辑器,可以不用手工编辑POM 6) m2eclipse内置了对中央Maven仓库的搜索功能 7) 依赖树功能,能够很方便的查看,jar包之间的依赖关系 安装:

在Eclipse中,从Help菜单选择 Software Updates。在Software Updates and Add-ons 对话框中,点击 Available Software 按钮,然后点击 Add Site 添加更新站点URL:http://download.eclipse.org/technology/m2e/releases 。在你添加了该URL之后,你将能够为你的项目添加 Maven Integration, Maven Optional Components,和Maven Project Configurators。

maven生命周期

Maven有三套相互独立的生命周期,请注意这里说的是“三套”,而且“相互独立”,这三套生命周期分别是:

  

Clean Lifecycle 在进行真正的构建之前进行一些清理工作。

Default Lifecycle 构建的核心部分,编译,测试,打包,部署等等。 Site Lifecycle 生成项目报告,站点,发布站点。

再次强调一下它们是相互独立的,你可以仅仅调用clean来清理工作目录,仅仅调用site来生成站点。当然你也可以直接运行 mvn clean install site 运行所有这三套生命周期。

clean生命周期

每套生命周期都由一组阶段(Phase)组成,我们平时在命令行输入的命令总会对应于一个特定的阶段。比如,运行mvn clean ,这个的clean是Clean生命周期的一个阶段。有Clean生命周期,也有clean阶段。Clean生命周期一共包含了三个阶段:

  

pre-clean 执行一些需要在clean之前完成的工作 clean 移除所有上一次构建生成的文件

post-clean 执行一些需要在clean之后立刻完成的工作

mvn clean 中的clean就是上面的clean,在一个生命周期中,运行某个阶段的时候,它之前的所有阶段都会被运行,也就是说,mvn clean 等同于 mvn pre-clean clean ,如果我们运行 mvn post-clean ,那么 pre-clean,clean 都会被运行。这是Maven很重要的一个规则,可以大大简化命令行的输入。

Site生命周期

   

pre-site 执行一些需要在生成站点文档之前完成的工作 site 生成项目的站点文档

post-site 执行一些需要在生成站点文档之后完成的工作,并且为部署做准备 site-deploy 将生成的站点文档部署到特定的服务器上

这里经常用到的是site阶段和site-deploy阶段,用以生成和发布Maven站点,这可是Maven相当强大的功能,Manager比较喜欢,文档及统计数据自动生成,很好看。

Default生命周期

Default生命周期是Maven生命周期中最重要的一个,绝大部分工作都发生在这个生命周期中。这里,只解释一些比较重要和常用的阶段:

                     

validate

generate-sources process-sources generate-resources

process-resources 复制并处理资源文件,至目标目录,准备打包。 compile 编译项目的源代码。 process-classes

generate-test-sources process-test-sources generate-test-resources

process-test-resources 复制并处理资源文件,至目标测试目录。 test-compile 编译测试源代码。 process-test-classes

test 使用合适的单元测试框架运行测试。这些测试代码不会被打包或部署。 prepare-package

package 接受编译好的代码,打包成可发布的格式,如 JAR 。 pre-integration-test integration-test

post-integration-test verify

install 将包安装至本地仓库,以让其它项目依赖。

deploy 将最终的包复制到远程的仓库,以让其它开发人员与项目共享。

运行任何一个阶段的时候,它前面的所有阶段都会被运行,这也就是为什么我们运行mvn install 的时候,代码会被编译,测试,打包。此外,Maven的插件机制是完全依赖Maven的生命周期的,因此理解生命周期至关重要。

POM

1) Maven中包含工程和配置信息的XML文件、

2) Build directory:target,Resource directory:src/main/java,Test directory:src/main/test 3) Maven1中的project.xml对应于Maven2中的pom.xml 4) 配置项目的依赖和可执行的插件、目标及构建剖面信息

5) Super POM是Maven默认POM。所有POM都继承自该POM,除非显示设置 6) Mininum POM: 4.0.0 com.mycompany.app my-app 1

7) 正确的构件名称(artifact name)格式如下

::比如:”com.llbt.app:my-app:1” 8) 每个工程都有一个包装类型,如果不指定则使用jar值 9) Pom文件由以下元素组成:

*Dependencies

*Developers and contributors *Plugin lists(including reports)

*Plugin executions and matching ids *Plugin configuration *Resources 10) 不同目录层次指定父Pom采用如下

|-- my-module

|`-- pom.xml(my module的pom) `-- pom.xml(my app的pom)

com.mycompany.app my-app 1

4.0.0 com.mycompany.app my-module 1

说明:my-module继承自my-app

简化成如下格式

com.mycompany.app my-app 1

4.0.0 my-module

11) 同层次目录指定父Pom采用如下

|-- my-module | `-- pom.xml `-- parent

`-- pom.xml

com.mycompany.app my-app 1

.../parent/pom.xml

4.0.0 my-module

12) 项目聚合

与项目继承类似,但是项目继承是module的pom中指定parent,而项目聚合是从parent的pom中指定modules。项目聚合需要实现以下两点: *设置parent的的值为pom

*再parent的pom中指定其modules(children POMs) 不同目录层次: |-- my-module | `-- pom.xml `-- pom.xml

4.0.0 com.mycompany.app my-app 1

pom

my-module

同层次目录: |-- my-module | `-- pom.xml `-- parent

`-- pom.xml

4.0.0 com.mycompany.app my-app 1

pom

../my-module

13) 项目变量:中指定value,其他element中采用{name}取值

Build profiles

1) 四种类型配置文件:

*工程文件——pom.xml

*用户文件——(%USER_HOME%/.m2/settings.xml) *全局文件——(%M2_HOME%/conf/settings.xml) *配置描述文件——profile.xml(Maven3已不需要) 配置文件触发或激活条件: *明确指定

*通过Maven设置 *基于环境设置 *OS设置

*目前或丢失的文件 2) 激活配置方式:

*命令行:mvn groupId:artifactId:goal –p profile-1,!profile-2

*中设置:profile-1 *中系统属性自动触发:

1.4或者[1.3,1.6)

等设置

列表env也可指定值test *中文件触发:filename

Repositories(Maven仓库)

1) Maven仓库用来存放配置插件和不同类型依赖关系

2) Local本地资源库:本地存放的远程下载缓存或临时创建的还未发布的构件

3) Remote远程仓库: 任何其他类型资源库,通过各种协议访问(file://或http://等),可

以是第三方发布的真正的远程资源库,也可以是公司内部发布的开发团队的私有资源库。 4) Maven不建议将jars存放在cvs中:

*仓库往往可以共享jars,节省存储空间

*检查项目更快:只需下载一次,无需重复更新大型二进制文件 *没有版本需要:减少cvs的版本管理任务,无需版本控制 5)

my-internal-site http://myserver/repo

the Standard Directory Layout

src/main/java src/main/resources src/main/filters src/main/assembly src/main/config src/main/webapp src/test/java src/test/resources src/test/filters src/site LICENSE.txt NOTICE.txt README.txt Application/Library sources Application/Library resources Resource filter files Assembly descriptors Configuration files Web application sources Test sources Test resources Test resource filter files Site Project's license Notices and attributions required by libraries that the project depends on Project's readme Dependency Mechanism(依赖机制)

1) 依赖管理是Maven最重要和用户最熟知的领域之一。使用单一工程时对依赖机制的使

用不是那么必要,但是当项目由多个负责的工程相互构成的时候,使用依赖管理能让你更好的控制项目及保持工程稳定。

2) Transitive dependencies传递依赖:Maven2.0中只支持”最接近的定义”,只使用最接近

的依赖于你的项目的依赖关系树的版本。

3) Excluded dependencies 排除依赖:x->y,y->z时x可以明确排除对z的依赖

4) Optional dependencies可选依赖:y->z,y可以明确指出对z的可选依赖,当x->y时不

会传递可选依赖,如果x需要依赖z就要在x的选项中添加对z的依赖。

5) Dependency scope依赖范围:限制依赖传递的同时影响各种构建路径。主要范围有

compile(默认的)、provided、runtime、system、import等。 6) Dependency Management在共同pom配置所有的依赖信息,在子pom中简单引用即可。

(http://maven.apache.org/guides/introduction/introduction-to-dependency-mechanism.html参考)在依赖关系中我们必须指定type,因为依赖引用最小集合是,快捷引用是,type默认为jar而classfier默认是空的。

因篇幅问题不能全部显示,请点此查看更多更全内容

Top