Maven2构建.docx
- 文档编号:4118237
- 上传时间:2022-11-28
- 格式:DOCX
- 页数:17
- 大小:36.92KB
Maven2构建.docx
《Maven2构建.docx》由会员分享,可在线阅读,更多相关《Maven2构建.docx(17页珍藏版)》请在冰豆网上搜索。
Maven2构建
第一章介绍
Maven2是一种项目管理框架,能够简化项目的开发,形成统一的规范,节省操作时间。
Maven2是规范的开发流程、软件开发的约定、项目管理框架、构建工具。
Maven2对项目进行了抽象,用POM描述。
Maven2能够提供一致性、过程重用、敏捷性、可维护性。
1.Maven2的原则:
1.1配置管理的约定
项目目录的标准结构:
利用维护人员的知识重用,节省时间
一个项目单个输出:
利于模块化,利于按模块重用,当个目标输出,利用依赖管理来解决模块间的关联关系
命名约定:
利于维护,输出一般为
1.2构建逻辑重用
过程的执行均由plug-in进行,某个阶段对应一个plug-in
1.3根据声明执行
过程的执行通过在POM中的声明进行
1.4一致的依赖管理
在POM中定义项目依赖。
对构建物的引用即为依赖,Maven根据POM中定义的依赖从respository中查找依赖。
Respository分为local和remote,先查找local再查找remote。
在依赖定义中的
maven会在respository的groupId/artifactId/version目录中查找名为
如果groupId为com.x..y.z,则按照java包管理的方式对依赖项所在目录进行管理。
所有的项目,只要是依赖同一个构建物只在respository保存一份,并非按项目放在lib目录下。
第二章安装与使用
1.安装与配置
1.1安装
a.从网站下载Maven2,解压即可
b.在环境变量中添加M2_HOME指向解压后的目录
c.在PATH中添加$M2_HOME/bin
d.在环境变量中添加JAVA_HOME指向JDK安装目录
e.在命令行运行mvn–-version检查安装是否成功
1.2配置
a.命令行下运行mvninstall或mvncompile,会在用户的home目录下生成.m2
b.在.m2目录下新建文件settings.xml添加如下内容
\maven2_respository
◆localRepository定义localrepository,下载jar包所放的路径和执行项目的install命令所生成的构建输出放在localRepository中
◆如果通过代理服务器访问remoterespository,代理服务器信息在proxy中定义,可以定义多个
c.在命令行下执行各个命令,maven2会根据需要从互联网上下载所需要的jar包
2.创建第一个Maven项目
使用Maven的原型机制创建一个项目,Maven根据模版项目新建项目,原型项目包含了一个项目涉及到的所有方面。
mvnarchetype:
create-DgroupId=com.mycompany.app-DartifactId=my-app
◆com.mycompany.app为公司的开发的包结构前缀
◆my-app为项目名称
3.Maven命令
编译源代码:
编译src/main/java下的源代码,将产生的class文件放在target/classes
#mvncompile
编译单元测试:
编译单元测试代码
#mvntest-compile
执行单元测试:
#mvntest
包括文件
_**/*Test.java
_**/Test*.java
_**/*TestCase.java
排除文件
_**/Abstract*Test.java
_**/Abstract*TestCase.java
打包:
根据pom.xml的配置生成构建物
#mvnpackage
安装:
执行构建,将输出物安装到localrespository中,以便其他项目可以引用
#mvninstall
清理:
#mvnclean
生成eclipse项目
#mvnelipse:
eclipse
生成IntelliJIDEA项目
#mvnidea:
idea
生成项目网站
#mvnsite
处理资源
#mvnprocess-resources
4.处理资源
可以将资源打包到jar文件中,只需要在src/main/resources下放至需要打包的资源即可,建立相应的目录结构,资源会按照其在resources下的相对目录被打包到jar的根目录下。
Pom.xml会打包到jar文件中,因此所有Maven项目都是自描述的,可以用mavenutils来写pom.xml,对于读取则使用java的标准api读取jar包中的资源即可。
对于单元测试需要的资源处理方式类似,其对应目录为src/test/resources。
可以使用如下方式读取资源文件:
[...]
//Retrieveresource
InputStreamis=getClass().getResourceAsStream("/test.properties");
//Dosomethingwiththeresource
[...]
5.对资源的过滤处理
有时资源文件中的某些值只有在构建时才能知道具体是什么值,比如application.properties中有变量version,则可以在其中如下定义
name=${project.name}
version=${project.version}
maven会根据变量名在pom.xml中取相应的值,可通过xml元素的名来引用pom.xml中的值。
为使用这种过滤处理机制,需要在资源文件中以变量方式${property}引用pom.xml,用户的settings.xml或者外部属性文件,系统属性中定义的变量。
其次需要在pom.xml中覆盖原来关于资源的默认定义,如下:
可以使用命令:
#mvnprocess-resources
来对资源进行处理和过滤。
执行这个命令后,资源会被复制到target/classes目录下,且进行了资源的过滤。
为使用定义在外部文件中的变量,可以按照如下的方式进行:
创建一个properties文件,如在src/main/filters下创建文件filter.properties,在其中定义变量external.property=hello,iamfromexternalfile.
在pom.xml中增加对此文件的引用:
在application.properties加入对变量的引用:
external=${external.property}
如果不在外部属性文件中定义变量,可以在pom.xml的properties节定义变量。
在pom.xml中添加:
You'rewelcome!
在application.properties加入对变量的引用:
pom.property=${pom.property.welcome}
maven可以引用系统属性中定义的变量,包括java的系统属性或者命令行中用-D指定的java属性参数。
在application.properties加入对变量的引用:
java.version=${java.version}
command.line.pro=${command.line.pro}
在命令行执行:
#mvnprocess-resources"-Dcommand.line.pro=hellofromcommandline"
6.阻止过滤处理非文本文件
可能在资源目录中包含了图片等二进制文件,在过滤资源处理时需要将其派除在外,需要在过滤声明中包含exclusion排除相应资源,此外还需要增加一条不需要过滤处理的资源声明:
[...]
[...]
7.使用MavenPlus-In
可以使用plus-in,为使编译器允许JDK5.0源码,可以在pom.xml中加入:
[...]
[...]
可以注意到plugin和dependency非常类似,处理方式也类似,如果在本地没有则需要下载,如果本地有就直接使用。
为了说明两者之间的相似性,在上例中明确给出了groupId和version,但多数情况下并不需要。
groupId默认会是org.apache.maven.plugins或者org.codehaus.mojo。
如果不指定version,则会选择最新的版本。
为了解plugin的配置选项,可以使用命令:
#mvnhelp:
describe–DgroupId=?
-DartifactId=?
来查询,如
mvnhelp:
describe-DgroupId=org.apache.maven.plugins-DartifactId=maven-compiler-plugin-Dfull=true
可以访问http:
//maven.apache.org/plugins/来查询可用的plugins。
第三章使用Maven创建应用
1.介绍
通过一个项目Proficio来了解Maven的最佳实践、高级使用及faq。
2.创建应用目录结构
为了重用,根据高聚合低耦合的方式按方面分解应用。
如下是应用的目录结构:
ProficioAPI:
应用的编程接口。
ProficioCLI:
提供命令行接口的代码。
ProficioCore:
应用编程接口的实现。
ProficioModel:
应用的数据结构,包含需要的所有类。
ProficioStores:
放置所有store模块,该应用包含memory-basedstore和XStream-basedstore。
Maven使用默认的命名规则,你可以按照项目决定如何命名,唯一需要注意的就是项目成员能够轻易而一致的理解。
检查顶层的pom,可以看到应用Proficio的子模块,每个模块都是对一个maven工程的引用,对应一个pom。
这种配置就是多模块构建,其pom如下:
//maven.apache.org
[...]
[...]
注意其中的:
version元素,其值为1.0-SNAPSHOT,在多模块应用中需要同时发布所有子模块,很有必要保持一致的应用版本。
在顶层的pom中定义应用版本可以使所有模块使用。
Packaging元素,其值为pom,在包含子模块的应用pom中,其值必须为pom。
检查各个子模块对应项目的pom中的Packaging元素的值,除ProficioStores其值为pom,其下包含两个子模块,其余均为jar,表明不再包含子模块。
Maven以这样的方式递归的进行分析。
3.使用项目继承
利用项目继承可以将结构信息,部署信息,共同的依赖信息放置在单一的位置。
在每个工程的pom中:
[...]
[...]
这使得项目的pom可以继承顶层pom中的定义,检查顶层pom的dependencies部分:
[...]
[...]
在各个子模块的pom中没有对Junit依赖的定义,但是从顶层pom中继承了依赖的定义。
为了看清楚可以在一个子模块pom所在目录下,执行命令
#mvnhelp:
effective-pom
可以看到最终起效果的pom,这在找错时很有效。
4.管理依赖
在pom中指明dependencymanagement元素的方式maven结合项目继承来管理依赖。
在多模块应用中,可能多个子项目会有共同的依赖。
此时为了正确运行,必须让所有的子项目使用依赖项的同一版本。
必须确保应用的各个项目的依赖项和版本一致,才能保证测试的和发布的是相同的成果。
因此,应在顶层的pom中定义共同的依赖关系。
在Proficio应用的顶层pom中的dependencymanagement段如下:
注意${project.version}变量指的是应用的version。
顶层pom中的dependencies与dependencyManagement中的dependencies元素有一个重要的区别:
dependencyManagement中的dependencies元素只表明依赖项版本的优先选择,并不影响项目的依赖项;而dependencies元素则影响项目的依赖项。
检查Proficioapi模块的pom:
其中没有指明依赖项的版本信息,在顶层pom中的dependencyManagement中表明其优选的版本是${project.version}即1.0-SNAPSHOT。
为使其模块pom完整,其版本信息会注入其中。
只有当dependencies元素中没有指明版本信息时,dependencyManagement中的dependencies元素才起作用。
5.使用快照
当开发多模块应用时,每个模块时常变动。
Maven的快照是由最新的源码构建的输出物。
如果看一下顶层的pom:
[...]
<
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Maven2 构建
![提示](https://static.bdocx.com/images/bang_tan.gif)