视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
maven基础知识
2025-10-02 12:36:13 责编:小OO
文档
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)下载maven,主要版本3.0.3/2.2.1/2.0.11

2)环境要求:jdk1.5以上+Memory+Disk(>100M)+OS(Windows xp/7或者Mac OS)

3)将下载包unzip,放置到指定的目录m2_path下

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

5)设置M2=%M2_HOME%\\bin,设置MAVEN_OPTS=-Xms 256m –Xmx 512m(可选)

6)环境变量Path中添加%M2%

7)设置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/javaApplication/Library sources
src/main/resourcesApplication/Library resources
src/main/filtersResource filter files
src/main/assemblyAssembly descriptors
src/main/configConfiguration files
src/main/webappWeb application sources
src/test/javaTest sources
src/test/resourcesTest resources
src/test/filtersTest resource filter files
src/siteSite
LICENSE.txtProject's license
NOTICE.txtNotices and attributions required by libraries that the project depends on
README.txtProject'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默认是空的。下载本文

显示全文
专题