maven经验之谈(一)
来源:互联网 发布:学java web看什么书 编辑:程序博客网 时间:2024/06/08 03:24
传统项目开发过程
在进行软件开发的过程中,无论什么样的项目,采用何种技术,使用何种编程语言,我们都要重复相同的开发步骤:收集依赖构建、编写源代码、配置信息、测试、打包、发布、文档
实际上这些步骤是完全重复性的工作。而maven要做的就是让开发人员能专注于商业逻辑并去实现它,而不是把时间浪费在学习如何在不同的环境中去打包,发布等等事情。它让开发人员从这些任务中解脱出来,是的项目开发的效率更高。
maven优势
maven是面向技术层面,针对Java开发项目管理工具,它提供了构建工具所提供功能的超集,除了构建功能之外,Maven还可以管理项目结构、管理依赖关系、生成报告、生成Web站点、同时还有助于团队成员之间的交流与协作。开发者通过Maven管理项目从中受益,Maven为开发提供以下便利之处
- 指导开发
提供了Java项目的最佳开发实践,自由开发项目骨架而可以自动生成项目结构
- 自动编译
不仅仅只像Ant自动编译,还包括测试、打包、发布、文档生成、项目站点生成等等。
- 依赖管理
Maven可以方便地管理应用程序依赖,例如第三方依赖、模型依赖等
- 无限扩展
插件模式可以无限增强Maven功能,例如通过Tomcat、Jetty插件可以自由控制其服务器。
- 持续集成
鼓励开发者积极提交代码,更早地发现程序错误,在并行开发中稳妥推进。
- 开发协作
更简单和谐的团队协作
maven概念模型
基本概念
maven名词解释
- Project
任何你想build的事物,Maven都可以认为它们是工程。这些工程被定义为工程对象模型(POM,Project Object Model)。一个工程可以依赖其它的工程,一个工程也可以由多个子工程构成。
- POM
POM(pom.xml)是Maven的核心文件,它是指示Maven如何工作的元数据文件,类似于Ant中的build.xml文件。POM文件位于每个工程的根目录中。
- GroupId
groupId是一个工程在全局中唯一的标识符,一般的,它就是工程名。groupId有利于使用一个完全的包名,将一个工程从其它有类似名称的工程里区别出来。
- Artifact
artifact是工程将要产生或需要使用的文件,它可以使jar文件,源文件,二进制文件,war文件,甚至是pom文件。每个artifact都由groupId和artifactId组合的标识符唯一识别。需要被使用(依赖)的artifact都要放在仓库(Repository)中,否则Maven无法找到它们。
- Dependency
为了能够build或运行,一个典型的Java工程会依赖其它的包。在Maven中,这些被依赖的包就被称为dependency。dependency一般是其它工程的artifact。
- Plug-in
Maven是由插件组织的,它的每一个功能都是由插件提供的。插件提供goal,并根据在POM中找到的元数据去完成工作。
- Repository
仓库
setting.xml
- $user.home/.m2/repository/setting.xml
为用户范围的配置文件。
- $M2_HOME/conf/setting.xml
为全局范围的配置文件,修改后将影响本机所有用户的配置。这里建议只修改用户级别的配置,既不影响其他用户,也不影响后期升级。
- 配置介绍
localRepository:自定义本地库路径,默认在$user.home/.m2中。
interactiveMode:Maven是否需要和用户交互以获得输入。默认为true
offline:表示Maven是否需要在离线模式下运行。如果构建系统需要在离线模式下运行,则为true,默认为false。当由于网路设置原因或者安全因素,构建服务器不能连接远程仓库的时候,该配置就十分有用。
pluginGroups:当插件的组织Id(groupId)没有显示提供时,供搜寻插件组织Id的列表。该元素包含一个pluginGroup元素列表,每个子元素包含了一个组织Id。当我们使用某个插件,并且没有再命令行为其提供组织Id的时候,Maven就会使用该列表。默认情况下该列表包含了org.apache.maven.plugins
proxies:通过代理访问外部库
servers:集成认证服务,例如集成Tomcat
mirrors:为仓库列表配置的下载镜像列表
profiles:个性配置,需要在Activation标签中激活
activeProfiles:表示激活的profile
更过关于setting.xml配置的介绍请参见:点击打开链接
maven仓库
- 远程公用仓库
Maven内置了远程公用仓库:http://repo1.maven.org/maven2
这个公共仓库是由Maven自己维护,里面有大量的常用类库,并包含了世界上大部分流行的开源项目构件。目前是以Java为主的。
- 内部中心仓库
内部中心仓库也称为私有共享仓库(私服)。一般是由公司自己设立的,只为本公司内部共享使用。它既可以作为公司内部构件协作和存档,也可以作为公用类库镜像缓存,减少在外部访问和下载的频率。
搭载私服的方式有多重,这里就不再阐述。
- 本地仓库
Maven会将工程中依赖的构件(jar包)从远程下载到本机一个目录下管理,通常默认在$user.home/.m2/repository下。
自Maven2以后,构件的存储方式通常是groupId/artifactId/version/*.jar。除了以上默认的本地库地址,我们也可以自定义本地库到指定路径中去。
- 修改本地库位置
在$M2_HOME/conf/setting.xml文件的<localRepository>元素中指定路径,
例如:<localRepository>D:/my_repository</localRepository>
maven常用指令
- 检测Maven、JDK版本:mvn-v 或者 mvn -version
- 获取帮助选项:mvn-h 或者 mvn -help
- 显示详细错误信息:mvn-e
- 创建Java项目:mvnarchetype:create -DgroupId=${groupId} -DartifactId=${artifactId} 例如:mvnarchetype:create -DgroupId=com.bstek-DartifactId=hello -Dversion=0.1
- 创建Web项目:mvnarchetype:create -DgroupId=${packageName} -DartifactId=${webappName}-DarchetypeArtifactId=maven-archetype-webapp
- 创建其它项目(例如SSH):mvnarchetype:generate 然后根据提示选择项目骨架、groupId、artifactid、版本号••
- 转换成:Eclipse工程:mvneclipse:eclipse mvneclipse:clean //清楚Eclipse设置信息
- 编译:mvn complie
- 编译测试代码:mvn test-compile
- 产生:Site mvnsite
- 测试:mvn test //运行测试 mvn test -Dtest=${类型} //单独运行测试类
- 清除:mvn -clean //将清除原来编译的结果
- 打包:mvn package mvn package -Dmaven.test.skip=true //打包时不执行测试
- 发布:mvn install //将项目打包成构件安装到本地仓库 mvn deploy //发布到本地仓库或服务器
- 手动添加构件到仓库
mvninstall:install-file -Dfile=${jar包文件位置} -DgroupId=${groupId}-DartifactId=${artifactId} -Dversion=${版本号}-Dpackaging=jar -DgeneratePom=${是否同时创建pom文件}
- 复制依赖构件到相应目录:mvndependency:copy-dependencies -DoutputDirectory=${目标目录}-DexcludeScope=${scope} -Dsilent=true示例:mvn dependency:copy-dependencies -DoutputDirectory=WebRoot/WEB-INF/lib -Dsilent=true-DincludeScope=runtime
- 显示一个插件的详细信息:mvn help:describe -Dplugin=pluginName -Ddetail
pom.xml
是Maven项目的核心配置文件,位于每个工程的根目录,指示Maven工作的元数据文件。
- 节点介绍
<project> :文件的根节点
<modelversion> : pom.xml使用的对象模型版本
<groupId> :创建项目的组织或团体的唯一 Id
<artifactId> :项目的唯一 Id, 可视为项目名
<packaging> :打包类型,一般有JAR,WAR,EAR 等
<version> :产品的版本号
<name> :项目的显示名,常用于 Maven 生成的文档。
<url> :组织的站点,常用于 Maven 生成的文档
<description> :项目描述,常用于 Maven 生成的文档。
<dependencies>:构件依赖
<parent>:模型继承
<dependencyManagement>:依赖管理
<reporting>:创建报告
<build>:构建
<repositories>:引用第三方仓库
<licenses>:许可
- POM全景图
maven安装
- 下载安装包
地址:http://maven.apache.org/download.html
当前版本为3.0.4
- windows系统下安装
1)首先需要确定系统中装有JDK(版本1.4+)
2)将压缩包解压到本地磁盘某目录中,该目录则称为安装目录。
例如E:\bin\apache-maven-3.0.4
3)目录结构介绍:
bin:Maven的运行脚本
boot:Maven自己的类装载器
conf:该目录下包含了全局行为定制文件setting.xml
lib:Maven运行时所需的类库
- 配置环境变量
1)M2_HOME=安装目录
2)在path变量中增加%M2_HOME%\bin
3)MAVEN_OPTS=-XmsNNNm -Xmx NNNm(非必要项,可防止内存溢出,其中NNN表示具体的内存数量)
- 检查安装正确性
在命令行提示符下执行maven命令:mvn -v
- 实验Maven命令
在命令提示符下面输入:mvn help:system
该命令将会下载help插件并运行它,且打印Java系统属性和环境变量。
- maven经验之谈(一)
- 成长经验之谈(一)
- ArcGIS桌面经验之谈(一)
- 关于结果集的经验之谈(一)
- 考研英语做题经验之谈(一)
- 电子商务网站一般架构经验之谈(一)
- Hibernate 学习经验之谈-(一) 初始配置
- UI自动化测试经验之谈(一)
- 面向 MID 进行用户界面设计的经验之谈(一)
- 面向 MID 进行用户界面设计的经验之谈(一)
- 经验之谈一:关于Try Catch
- 一名程序员的经验之谈
- 一名程序员的经验之谈
- 经验之谈
- 经验之谈
- 经验之谈
- 经验之谈
- 经验之谈
- 两分钟彻底让你明白Android Activity生命周期(图文)!
- qt资源
- 实用的wordpress全站搜索替换插件search-and-replace中文版
- android webview onJsAlert只调用一次的问题
- 史诗乐推荐
- maven经验之谈(一)
- 生成的Dll突然变小的解决方法
- IOS开发学习笔记-----UILabel 详解
- discuz 2.5 导读 我的帖子显示发帖时间的修改
- 用python和karrigell做网站.第一篇
- java中,求圆的面积 圆柱的面积和体积,求圆柱的面积时调用圆的面积的求法
- APK文件解包修改重打包签名
- Apache FtpServer 的使用研究
- iOS 的常用框架简介