什么是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/)


注意:本文归作者所有,未经作者允许,不得转载