Use Maven3.x

前言

 

关于Maven,已经不再是一个全新的工具。但由于网络中各种褒贬不一的言论太多,一时让Maven淹没于形形色色的唾沫声之中,有很多人觉得Maven的学习门槛太高(是的,笔者也是这么认为,刚接触的时候确实一头雾水,有一种想把电脑从12楼扔下去的冲动),有很多人觉得有Ant就够了,但也有人认为Maven要搭建私服纯粹是扯淡...

 

既然存在这么多质疑,那么笔者为什么还是要讲解关于如何在项目中使用Maven,很简单,因为笔者需要让大家知道Maven究竟能为我们“项目管理”带何种实惠?

 

笔者推崇Maven的理由主要有以下3点:

 

1、如果你每天还在不停且重复的做项目构建(编译、测试、打包、发布),那么你完全需要一种流程化及自动化的方式来帮助你完成这些基础作业层,这便是你选择Maven的理由之一;

   

2、如果你还在为项目中的第三方依赖库发愁,整天想着应该去哪里寻找项目依赖库,或者如何解决依赖库版本冲突问题,或者不想为每一个项目都去建立一个lib文件夹,然后把几十兆甚至上百兆的依赖库做重复的复制和粘贴工作,那么你完全需要一种规范化且高度依赖化的方式来帮助你完成这些令人头痛且纠结的工作,这便是你选择Maven的理由之二;

 

3、全世界都在使用Maven(比如Spring Framework、SapphireCache Framework),你还等什么呢,这便是你选择Maven的理由之三;

 

一、什么是Maven?

 

Maven是一种基于项目对象模型(POM)的项目管理工具(纯Java开发),它可以通过一小段描述信息来管理项目的构建及类库依赖。相对于Ant等传统项目纯构建工具而言,Maven所包含的功能更像是一个功能的超集。

 

二、下载和安装Maven

 

本文所有的内容将完全基于Maven3.0.4版本,其下载地址为:http://maven.apache.org/download.html

当成功下载好Maven后,通过解压,我们可以发现Maven的目录结构为:

 

其中bin目录中所包含的内容为一些批处理文件,boot目录所包含的内容为Maven的自定义类装载器,conf目录中所包含的内容为Maven的核心配置文件,lib目录中所包含的内容为Maven的类库集合

 

笔者将Maven解压(安装)目录为D:\Program Files\apache-maven-3.0.4\,那么接下来要做的事情就是配置环境变量,由于笔者所使用的操作系统为windows,那么所演示的操作也将基于windows系统。

 

配置Maven的环境变量,你需要增加如下环境变量 :

M2_HOME:D:\Program Files\apache-maven-3.0.4\

Path:%M2_HOME%\bin

 

当成功配置好环境变量后,我们则需要通过如下批处理命令检测是否成功安装Maven:

echo %M2_HOME%:检查Maven的安装目录;

 

mvn -v:查看当前Maven的版本号;

 

 

有时候你所在的公司基于安全因素考虑,要求你使用通过安全认证的代理访问因特网。这时就需要为Maven配置HTTP代理。你可以在目录~/.m2/setting.xml文件中编辑如下(如果没有该文件,则复制$M2_HOME/conf/setting.xml):

 

<proxies>
 <proxy>
  <id>optional</id>
  <active>true</active>
  <protocol>http</protocol>
  <username>proxyuser</username>
  <password>proxypass</password>
  <host>proxy.host.net</host>
  <port>80</port>
  <nonProxyHosts>local.net|some.host.com</nonProxyHosts>
 </proxy>
</proxies>

 

 

 三、构建Maven项目

 

通过Maven构建一个普通的Java项目,你如果不采用m2eclipse插件,则必须配置好Maven的环境变量,否则你将无法完成项目构建。

 

你可以使用如下批处理命令来创建一个基于Maven的普通Java项目: 

 

mvn archetype:generate -DgroupId=com.johngao -DartifactId=my-maven 
-Dversion=1.0.0 -DarchetypeArtifactId=maven-archetype-quickstart 

  

 

使用如上命令则可以成功创建一个基于Maven的普通Java项目,如果是第一次创建,Maven则会从远程中央仓库下载所需依赖类库至缺省的本地仓库中${user.home}/.m2/repository),你所要做的事情仅是等待即可。

 

当成功创建好项目后,项目目录结构大致如下:

my-maven 
|-- pom.xml 
|-- src 
    |-- main  
      |-- java
         |-- com  
             |-- johnago
                 |-- App.java
    |-- test
       |-- java
          |-- com
             |-- johngao
                 |-- AppTest.java

  

 

 

 

src/main/java : Java源文件存放位置;

src/test/java : 测试代码源文件存放位置;

 

前面章节笔者提到过Maven是基于项目对象模型(POM)的项目管理工具,那么咱么接下来分析下项目工程目录下的POM.xml文件。

该文件的内容为:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.johngao</groupId>
  <artifactId>my-maven</artifactId>
  <packaging>jar</packaging>
  <version>1.0.0</version>
  <name>my-maven</name>
  <url>http://maven.apache.org</url>
  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
      <scope>test</scope>
    </dependency>
  </dependencies>
</project>

  

 

 其中最重要的3个标签为:<groupId>、<artifactId><version>,这3个标签定义了整个项目的经纬

其中<groupId>标签定义了项目的所属分组(和项目所在的组织或公司关联),比如:org.springframework。而<artifactId>标签则定义了项目所属分组中的最小单位构件,比如:spring-core。<version>标签则定义了项目的版本

 

四、Maven常用命令

 

如果需要执行如下命令,则需要将目录切换至项目路径。

1、mvn clean compile:编译命令;

执行上述命令成功build 后,Maven会在工程目录下新建target目录,该目录将包含所有通过编译的字节码文件。

 

2、mvn clean:清理命令;

执行上述命令将会清除工程目录下的target目录。

 

3、mvn test:测试命令;

执行上述命令则会执行src/test/java 目录下的所有Junit 测试代码,当然执行此命令之前会先执行编译命令。

此命令执行顺序为:mvn clean compile --> mvn test

 

4、mvn package:打包命令;

执行上述命令会将项目打成jar包,并放在target目录中,当然执行此命令之前会先执行编译和测试命令。 package -Dmaven.test.skip=true -Pdev(不打包测试用例)

此命令执行顺序为:mvn clean compile --> mvn test --> mvn package

 

5、mvn install:安装命令;

执行上述命令则会将项目的jar包安装到本地仓库中,以便其他项目调用,当然执行此命令之前会先执行编译,测试,打包等命令。

此命令执行顺序为:mvn clean compile --> mvn test --> mvn package --> mvn install

 

通过执行上面5种常用命令,我们便可以完成一个项目的完整构建。

 

 

五、使用m2eclipse构建Maven项目

 

前面章节笔者已经带大家走进了Maven的世界,那么接下来笔者将会演示如何在eclipse中使用Maven。由于eclipse或myeclipse目前并没有对缺省对Maven进行集成,但这并不妨碍我们在IDE中使用Maven。

 

笔者向大家推荐一种用于在eclipse等IDE工具中建立Maven项目的插件工具,那便是m2eclipse。接下来你将会看到,在eclipse中通过m2eclipse插件管理Maven项目是多么的简单和方便。

 

单击eclipse菜单栏中的Help-->Eclipse Marketplace菜单,进行m2eclipse插件的下载:

 

 

下载的过程可能比较耗费时间,在这段时间之内,你可以有2种选择。第一,你可以选择看会电视或者转发微薄来消磨时光。第二,你可以去泡杯咖啡提提神,为接下来的事情做准备...

当成功下载好m2eclipse后,我们可以先把eclipse重启,然后通过File菜单创建一个Maven项目:

 

 

此操作按照缺省选项进行,请勿手痒勾选其他选项:

 

 

由于目前我们仅是通过Maven创建一个普通的Java项目,而非Web项目,所以大家只需勾选maven-archetype-quickstart选项即可:

 

 

 

接下来我们只需要输入项目的GroupId、ArtifactId、Version和package等选项即可。如果并不清楚GroupId、ArtifactId、Version等属性的作用及目的,请麻烦你先查看前几张的内容。最后我们点击Finish按钮即可成功创建Maven项目。

 

 

创建好的Maven项目工程结构如下:

 

既然通过m2eclipse插件已经成功建立好Maven项目后,接下来要做的事情就是如何使用Maven命令进行项目构建。

 

右击项目,选择你需要执行的命令操作:

 

如果你发现你所需要执行的命令并没有包含在Run As菜单中,大可不必惊慌。我们可以通过手工添加命令的方式来执行Maven命令。假如现在我们需要添加一个mvn package命令,我们可以通过Maven build...(非Maven build)选项进行Maven命令的添加:

 

当命令成功添加好以后,我们便可以在Run As菜单中选择我们所在执行的命令即可:

 

通过m2eclipse插件,我们可以很轻松的在eclipse中进行Maven项目的管理,那么接下来我们尝试着创建一个基于Maven的Web项目,当然这和创建传统的Java项目大同小异,只是有些细节部分需要注意而已。

 

在创建普通Java项目的时候我们Catalog属性选择的是All Catalogs属性,勾选的是maven-archetype-quickstart选项。然而既然我们需要创建Web项目,自然需要稍稍变化一下,Catalog属性我们需要选择Internal,然后勾选maven-archetype-webapp选项即可:

 

创建好的Maven项目工程(Web)结构如下:

 

 

右击项目,点击Properties->Project Facets:

 

其实大家除了可以使用eclipse或者myeclipse集成m2eclipse插件来进行Maven的项目管理外,大家还可以尝试使用另一种IDE工具:Spring Tool Suite。该工具仅对eclipse进行了二次开发,缺省就已经集成了Maven,所以大家无需再次手动下载m2eclipse插件(下载地址为:http://www.springsource.org/spring-tool-suite-download):

 

六、基于Maven的依赖管理

 

上述章节笔者已经完全阐述了如何使用Maven来构建你的项目,那么接下来笔者将会给你演示Maven的另一项功能,那便是依赖管理。什么是依赖管理呢?其实所谓依赖管理无非也就是对咱们项目中所使用的第三方类库进行统一的管理(不要告诉笔者你的项目没有任何第三方类库的依赖,当然那只是极少数),笔者说过,不知大家是否还记得,如果你还在为项目中的第三方依赖库发愁,整天想着应该去哪里寻找项目依赖库,或者如何解决依赖库版本冲突问题,或者不想为每一个项目都去建立一个lib文件夹,然后把几十兆甚至上百兆的依赖库做重复的复制和粘贴工作,那么你完全需要一种规范化且高度依赖化的方式来帮助你完成这些令人头痛且纠结的工作,这便是本章节要讲解的重点

 

假设咱们现在启动的项目依赖于Spring这个中间件,那么可能会用到Spring的spring-core-xx.jar,按照一般情况,咱们肯定会先去Spring的官网下载Spring的类库,然后通过手工的方式导入项目lib中,但这种手工的情况太麻烦,而且咱们还需要导入spring-core-xx.jar依赖的其他第三方类库。笔者敢问有谁能够记得住这些包预包之间的依赖???没有人吧,那么就耐心的看Maven如何管理依赖。

 

仔细观察如下POM.xml文件:

 

 

上述红色部分为依赖配置,也就是说基于Maven项目的类库依赖配置都可以通过<dependencies>标签完成。该标签中包含了:<groupId>、<artifactId><version>等3个标签,前面章节中,笔者给大家提到过,这3个标签共同组成了项目的经纬所以这3个属性是至关重要的。

 

假设咱们现在需要使用到spring-core.xx.jar包,咱们只需要在<dependencies>标签中后续定义即可,Maven会自动从中央仓库进行对应版本的依赖库下载至本地仓库中(无私服情况下),然后通过引用的方式加载至项目中,比如:

 

 

按照一般情况来说,我们一旦导入spring-core.xx.jar包,我们仍需要将该包依赖的其他第三方类库共同导入的,但Maven这时便能够体现出他的作用,仔细看下图:

 

 

基于Maven的依赖管理后,spring-core.xx.jar所需要的其他依赖库已经成功下载至本地仓库中一起被项目引用。

 

果你项目中存在其他依赖包也同样可以按照上述做法,但笔者需要提醒你的是,项目的经纬是至关重要的,如果你并没有正确定义依赖类库的经纬,Maven是无法进行下载的。

而且在后续章节中,笔者同时也会告诉你如何将定义好经纬的项目发布至私服环境中,

以及如何提供给其他项目下载至本地仓库。

 

Maven3.x的使用就基本告一段落,但本文相关系类并不会就此结束,希望大家密切留意关于如何搭建内网私服。

猜你喜欢

转载自gao-xianglong.iteye.com/blog/1729217