什么是maven?
Maven是一个用于项目构建的工具,通过它便捷的管理项目的生命周期。即项目的jar包依赖,开发,测试,发布打包。
安装与配置环境
在安装maven之前,先确保已经安装JDK1.7及以上版本,并且配置好环境变量。
如下载maven3,最新版本是Maven3.3.3 ,下载地址:http://maven.apache.org/download.cgi
下载apache-maven-3.3.3-bin.zip文件后,并解压到 D:\Java\apache-maven-3.3.3
配置M2_HOME的环境变量 ,Maven说只是添加 M2_HOME ,但一些项目仍引用 Maven的文件夹 MAVEN_HOME, 因此,为了安全也把它添加进去,如图所示:
用此命令建立一个maven项目
$ mvn archetype:generate
-DgroupId=[value] //代表组织和整个项目的唯一标志
-DartifactId=[value] //具体项目的名称
-DarchetypeArtifactId=[value] //创建maven项目结构模型
-DinteractiveMode=[false/true] //是否已交互模式进行,false就会采用默认设置建立项目
示例:
mvn archetype:generate -DgroupId=me.ziry -DartifactId=mymaven -DarchetypeArtifactId=maven-archetype-webapp -DinteractiveMode=false
常用archetypeArtifactId
• maven-archetype-quickstart
默认的Archetype,基本内容包括:
一个包含junit依赖声明的pom.xml
src/main/java主代码目录及一个名为App的类
src/test/java测试代码目录及一个名为AppTest的测试用例
• maven-archetype-webapp
一个最简单的Maven war项目模板,生成的项目内容包括:
一个packaging为war且带有junit依赖声明的pom.xml
src/main/webapp/目录
src/main/webapp/index.jsp文件
src/main/webapp/WEB-INF/web.xml文件
Maven常用命令:
• mvn archetype:generate :创建 Maven 项目
• mvn compile :编译源代码
• mvn test-compile :编译测试代码
• mvn test : 运行应用程序中的单元测试
• mvn site : 生成项目相关信息的网站
• mvn clean :清除目标目录中的生成结果
• mvn package : 依据项目生成 jar 文件
• mvn install :在本地 Repository 中安装 jar
• mvn deploy:将jar包发布到远程仓库
• mvn eclipse:eclipse :生成 Eclipse 项目文件
• mvn javadoc:jar :生成对应的javadoc
• mvn dependency:sources :下载对应的源码依赖包
• mvn dependency:copy-dependencies -DoutputDirectory=lib 下载对应的源码依赖包到lib
mvn常用参数
• mvn -e 显示详细错误
• mvn -U 强制更新snapshot类型的插件或依赖库(否则maven一天只会更新一次snapshot依赖)
• mvn -o 运行offline模式,不联网更新依赖
• mvn -N仅在当前项目模块执行命令,关闭reactor
• mvn -pl module_name在指定模块上执行命令
• mvn -ff 在递归执行命令过程中,一旦发生错误就直接退出
• mvn -Dxxx=yyy指定java全局属性
• mvn -Pxxx引用profile xxx
什么是pom?
pom作为项目对象模型。通过xml表示maven项目,使用pom.xml来实现。主要描述了项目:包括配置文件;开发者需要遵循的规则,缺陷管理系统,组织和licenses,项目的url,项目的依赖性,以及其他所有的项目相关因素。
完整的POM.XML
maven的协作相关属性
项目坐标
groupId: 代表组织和整个项目的唯一标志。比如说所有的Maven组件的groupId都是org.apache.maven。
artifactId: 具体项目的名称,它于groupId共同确定一个项目在maven repo中的位置,例如,groupId=org.codehaus.mojo, artifactId=my-project的项目,在maven repo中的位置为:$M2_REPO/org/codehaus/mojo/my-project
version: 用于说明目前项目的版本,在引用依赖的时候确定具体依赖的版本号。
packaging: 规定项目的输出格式,包括jar、war、pom、apk等,根据实际需要确定。例如,开发一般的java库,可以使用jar packaging;开发android则是apk packaging。
name:用户描述项目的名称,无关紧要的东西,可选
url:应该是只是写明开发团队的网站,无关紧要,可选
classifer:分类
其中groupId,artifactId,version,packaging这四项组成了项目的唯一坐标。一般情况下,前面三项就可以组成项目的唯一坐标了。
Maven依赖机制
其中groupId, artifactId, version这三个组合标示依赖的具体工程
scope依赖范围:
compile(编译范围):compile是默认的范围;如果没有提供一个范围,那该依赖的范围就是编译范围。编译范围依赖在所有的classpath中可用,同时它们也会被打包。
provided(已提供范围):provided依赖只有在当JDK或者一个容器已提供该依赖之后才使用。例如,如果你开发了一个web应用,你可能在编译classpath中需要可用的Servlet API来编译一个servlet,但是你不会想要在打包好的WAR中包含这个Servlet API;这个Servlet API JAR由你的应用服务器或者servlet容器提供。已提供范围的依赖在编译classpath(不是运行时)可用。它们不是传递性的,也不会被打包。
runtime(运行时范围):runtime依赖在运行和测试系统的时候需要,但在编译的时候不需要。比如,你可能在编译的时候只需要JDBC API JAR,而只有在运行的时候才需要JDBC驱动实现。
test(测试范围):test范围依赖 在一般的 编译和运行时都不需要,它们只有在测试编译和测试运行阶段可用。
system(系统范围):system范围依赖与provided类似,但是你必须显式的提供一个对于本地系统中JAR文件的路径。这么做是为了允许基于本地对象编译,而这些对象是系统类库的一部分。这样的构件应该是一直可用的,Maven也不会在仓库中去寻找它。如果你将一个依赖范围设置成系统范围,你必须同时提供一个systemPath元素。注意该范围是不推荐使用的(你应该一直尽量去从公共或定制的Maven仓库中引用依赖)。
Maven 的本地资源库
如下载 “kaptcha”,将其解压缩并将 kaptcha-version.jar 复制到其他地方,比如:C盘。发出下面的命令:
mvn install:install-file -Dfile=c:\kaptcha-{version}.jar -DgroupId=com.google.code -DartifactId=kaptcha -Dversion={version} -Dpackaging=jar
现在,“kaptcha” jar被复制到 Maven 本地存储库。
完成,现在 “kaptcha” jar 能够从你的 Maven 本地存储库检索了。
Myeclipse 10 Maven 构建 Java Web 项目
打开 Myeclipse 中的菜单 Windows 》Preferences 》搜索“maven”,找到“Installations”,把刚才的 Maven 目录添加进去,并勾选。
创建项目:new 》 other 》 搜索“maven”,双击“Maven Project”
接下来选择项目名称和位置,我们保持默认直接 Next。
目录选择所有,输入 webapp 进行过滤,找到 webapp-javaee6 并双击下一步
Group id:唯一标识;Ariface Id:项目名;Version 默认;Package:包名,填好后点 Finish 完成。
项目默认目录结构如下
项目创建成功。像以往的普通项目那样部署到 Tomcat 中,启动并访问自带的index.jsp。
(参考教程:http://www.yiibai.com/maven/)
注意:本文归作者所有,未经作者允许,不得转载