【Java EE 学习 82 上】【MAVEN基本安装和使用方法】

1、Maven概述

  1.什么是Maven?

    Maven中文意思是"行家"、"专家",它是一种跨平台的项目管理工具。html

  2.Maven有什么做用?

    Maven可以实现基于Java平台的项目构建、依赖管理和项目信息管理。java

  3.什么是理想的项目构建?

    高度自动化,跨平台,可重用组件,符合标准化的规范spring

  4.什么是依赖,为何要进行依赖管理?

    自动下载,统一依赖管理,方便项目升级和修改apache

  5.项目信息包括哪些内容?

    项目名称描述、开发人员信息、开发者信息等。框架

  Maven官方下载地址:http://maven.apache.org/download.cgieclipse

  Eclipse插件更新地址:http://www.eclipse.org/m2e/maven

  安装过程见官方文档说明:http://maven.apache.org/install.htmlhttp://maven.apache.org/configure.htmlide

2、Ant比较Maven

  Ant和Maven都是apache下的工程,在早些时候,Ant很是流行,像是spring框架和hibernate框架都使用了该项目管理工具进行项目的构建,可是如今到他们的官网上查看项目结构,能够看出,他们都已经使用Maven管理最新的项目了,为了实现过渡,中间曾经出现过Maven和Ant共存的状况,这样却是方便了用户的选择,可是如今这种状况已经没有了,或者说极少出现了,如今各大公司都直接使用Maven管理项目而抛弃了Ant。工具

  1.Ant的劣势

    (1)没有一个约定的目录结构

    (2)必须明确让Ant作什么,何时作,而后编译、打包

    (3)没有生命周期,必须定义目标和其实现的任务序列

    (4)没有继承依赖管理

  2.Maven取代Ant的优点

    (1)拥有约定的目录结构,不须要配置Maven就知道你的代码放到了哪里

    (2)拥有一个生命周期,好比使用命令mvn install就能够自动执行编译、测试、打包、安装到Maven仓库等过程

    (3)拥有依赖管理、仓库管理

3、Maven的配置

  1.两种settings.xml配置文件

    *  MAVEN_HOME/conf/settings.xml,这是全局的配置文件post

    *  ~/.m2/settings.xml配,这是单个用户的配置文件

  2.Maven约定的目录结构

    项目文件夹

      |------src                

          |------main                          

              |------java          //存放项目的java文件

              |------resources        //存放项目资源文件,如spring、hibernate的配置文件

          |------test              

              |------java          //存放全部测试的java文件

              |------resources        //存放测试须要的资源文件,如spring、hibernate的配置文件

      |------target                 //存放项目生成的目标代码、资源文件等

      |------pom.xml                 //项目核心配置文件

  3.pom.xml配置文件中的标签讲解

    详细配制方法见英文文档:http://maven.apache.org/pom.html

    POM是"Project Object Model"的英文缩写,

    (1)一个完整的pom.xml配置文件的格式以下:

 1 <project xmlns="http://maven.apache.org/POM/4.0.0"
 2   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 3   xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
 4                       http://maven.apache.org/xsd/maven-4.0.0.xsd">
 5   <modelVersion>4.0.0</modelVersion>
 6  
 7   <!-- The Basics -->
 8   <groupId>...</groupId>
 9   <artifactId>...</artifactId>
10   <version>...</version>
11   <packaging>...</packaging>
12   <dependencies>...</dependencies>
13   <parent>...</parent>
14   <dependencyManagement>...</dependencyManagement>
15   <modules>...</modules>
16   <properties>...</properties>
17  
18   <!-- Build Settings -->
19   <build>...</build>
20   <reporting>...</reporting>
21  
22   <!-- More Project Information -->
23   <name>...</name>
24   <description>...</description>
25   <url>...</url>
26   <inceptionYear>...</inceptionYear>
27   <licenses>...</licenses>
28   <organization>...</organization>
29   <developers>...</developers>
30   <contributors>...</contributors>
31  
32   <!-- Environment Settings -->
33   <issueManagement>...</issueManagement>
34   <ciManagement>...</ciManagement>
35   <mailingLists>...</mailingLists>
36   <scm>...</scm>
37   <prerequisites>...</prerequisites>
38   <repositories>...</repositories>
39   <pluginRepositories>...</pluginRepositories>
40   <distributionManagement>...</distributionManagement>
41   <profiles>...</profiles>
42 </project>

    (2)最简单的配置文件格式:

 1 <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/xsd/maven-4.0.0.xsd">
 2   <modelVersion>4.0.0</modelVersion>
 3   <groupId>com.kdyzm.hello</groupId>
 4   <artifactId>Hello</artifactId>
 5   <version>0.0.1-SNAPSHOT</version>
 6   <name>Hello</name>
 7   
 8     <dependencies>
 9         <dependency>
10             <groupId>junit</groupId>
11             <artifactId>junit</artifactId>
12             <version>4.9</version>
13             <scope>test</scope>
14         </dependency>        
15         
16     </dependencies>
17 </project>

    根节点必须是project标签;

    modelVersion标志了POM的版本,maven2和maven3只支持4.0.0,并且该声明是必须的;

    groupId、artifactId、version是maven坐标组成的三大元素,这就涉及到了什么是maven坐标的问题;

    坐标,按照之前的理解,是用于惟一肯定空间中某一点的度量,这里坐标有着相同的含义,它用来惟一标识一个项目,具体到某一个版本号,groupId、artifactId、version三个元素共同肯定一个惟一的项目,它就像一个地址或者时间戳同样,一个项目使用它标识本身在maven库中的独一无二的位置。

    groupId:通常使用相似于com.kdyzm.main这种域名的形式来表示,体如今maven系统中,就是java包结构同样的东西,这个字段不须要非得用这种形式,可是使用这种形式更加清晰,就像maven,它的工程都放到了以org.apache.maven为groupId的文件夹中,体如今maven仓库,其实就是org/apache/maven

    artifacted:表明了工程的名字,不须要和真实的工程名字相一致,可是强烈推荐一致,方便记忆,不容易出错。

    version:版本号

    package:决定若是执行mvn package命令的话须要将项目生成的文件打包成什么样的类型,支持的类型以下:

      pomjarmaven-pluginejbwarearrarpar

    dependencies:该标签的做用就是声明依赖的项目或者jar包,每个依赖都是用dependendy标签来单独声明,声明的内容除了使用groupId、artifactId和version定位项目以外,还要有一个scope标签用来指定做用范围,其做用和java中的注解有些类似;理解这个须要先搞定maven项目的构建过程:

    

    scope的全部支持类型:

      compile:编译时有效,做用在上图中的编译阶段

      test:测试时有效,做用在上图中的测试阶段

      runtime:运行时有效,做用在测试阶段和之后的阶段

      provided:顾名思义,当该项目运行的容器中提供了该jar包的时候(测试运行的时候没有该环境),须要将该依赖声明为provided,这样jar包就不会拷贝到运行的容器中了,这样可以防止jar包冲突问题的发生。

      system:其做用和provided相似,可是须要除去一点,该jar包在本地maven库中不存在(有疑问)。

4、maven项目的生命周期

  什么是生命周期?从建立到死亡的过程就是生命周期,一个比较完整的声明周期以下:

  • validate
  • generate-sources
  • process-sources
  • generate-resources
  • process-resources                                                               复制并处理资源文件,至目标目录,准备打包。
  • compile                                                                                 编译项目的源代码
  • process-classes
  • generate-test-sources
  • process-test-sources
  • generate-test-resources
  • process-test-resources                                                             复制并处理资源文件,至目标测试目录。
  • test-compile                                                                           编译测试源代码。
  • process-test-classes
  • test                                                                                       使用合适的单元测试框架运行测试。这些测试代码不会被打包或部署
  • prepare-package
  • package                                                                                  接受编译好的代码,打包成可发布的格式,如 JAR 
  • pre-integration-test
  • integration-test
  • post-integration-test
  • verify
  • install                                                                                     将包安装至本地仓库,以让其它项目依赖
  • deploy                                                                                    将最终的包复制到远程的仓库,以让其它开发人员与项目共享。

  maven可以实现高度的自动化,当咱们执行mvn compile命令的时候,其生命周期以前的命令都会依次执行一遍;同理,当咱们执行mvn test命令的时候,包括mvn compile命令在内,其以前的命令都会依次执行一遍。

5、两个简单项目的练习

  1.Hello项目,如下是maven项目的实际结构示意图

  Hello

    |------src

        |------main

            |------java

                |------com/kdyzm/main/Hello.java

            |------resources

        |------test

            |------java    

                |------com/kdyzm/main/test/HelloTest.java

            |------resources

    |------target

    |------pom.xml

1 package com.kdyzm.main;
2 public class Hello
3 {
4     public int calculate(int input){
5         System.out.println("获得输入参数是:"+input);
6         return input*input;
7     }
8 }
com.kdyzm.main.Hello.java
 1 package com.kdyzm.main.test;
 2 
 3 import org.junit.Test;
 4 import com.kdyzm.main.Hello;
 5 public class HelloTest
 6 {
 7     @Test
 8     public void testHello(){
 9         Hello hello=new Hello();
10         int result=hello.calculate(2);
11         System.out.println("计算获得的结果是:"+result);
12     }
13 }
com.kdyzm.main.test.HelloTest.java
 1 <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/xsd/maven-4.0.0.xsd">
 2   <modelVersion>4.0.0</modelVersion>
 3   <groupId>com.kdyzm.hello</groupId>
 4   <artifactId>Hello</artifactId>
 5   <version>0.0.1-SNAPSHOT</version>
 6   <name>Hello</name>
 7   
 8     <dependencies>
 9         <dependency>
10             <groupId>junit</groupId>
11             <artifactId>junit</artifactId>
12             <version>4.9</version>
13             <scope>test</scope>
14         </dependency>        
15         
16     </dependencies>
17 </project>
Hello/pom.xml

  使用maven命令进行管理:            

  1. mvn compile                       该命令可以将源代码编译,生成的class文件保存到了target文件夹中。
  2. mvn clean                           该命令可以将target文件夹删除掉
  3. mvn clean test                 该命令是一个组合命令,它可以先执行mvn clean命令,再执行mvn test命令
  4. mvn package                       该命令是一个打包的命令,根据配置文件的不一样,它会将生成的文件打包成不一样的类型
  5. mvn install                          该命令会先将项目打包,以后再将相关的jar包和配置文件拷贝到maven仓库中
  6. mvn clean install                  该命令也是一个组合命令,它可以先执行mvn clean命令,而后执行mvn install命令

 

  2.HelloFriend项目

  HelloFriend

    |------src

        |------main

            |------java

                |------com/kdyzm/main/HelloFriend.java

            |------resources

        |------test

            |------java

                |------com/kdyzm/main/test/HelloFriendTest.java

            |------resources

    |------target

    |------pom.xml

 1 package com.kdyzm.main;
 2 import com.kdyzm.main.Hello;
 3 public class HelloFriend{
 4     public String sayHello(int input){
 5         System.out.println("HelloFriend类sayHello方法接收到的参数是:"+input);
 6         Hello hello = new Hello();
 7         int result=hello.calculate(input);
 8         return result+"";
 9     }
10 }
com.kdyzm.main.HelloFriend
 1 package com.kdyzm.main.test;
 2 import com.kdyzm.main.HelloFriend;
 3 import org.junit.Test;
 4 public class HelloFriendTest
 5 {
 6     @Test
 7     public void testSayHello(){
 8         HelloFriend helloFriend=new HelloFriend();
 9         String result=helloFriend.sayHello(2);
10         System.out.println("testSayHello的执行结果是:"+result);
11     }
12 }
com.kdyzm.main.test.HelloFriendTest.java
<!--pom.xml配置文件-->
1
<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/xsd/maven-4.0.0.xsd"> 2 <modelVersion>4.0.0</modelVersion> 3 <groupId>com.kdyzm.hello</groupId> 4 <artifactId>HelloFriend</artifactId> 5 <version>0.0.1-SNAPSHOT</version> 6 <name>HelloFriend</name> 7 8 <dependencies> 9 <dependency> 10 <groupId>junit</groupId> 11 <artifactId>junit</artifactId> 12 <version>4.9</version> 13 <scope>test</scope> 14 </dependency> 15 16 <dependency> 17 <groupId>com.kdyzm.hello</groupId> 18 <artifactId>Hello</artifactId> 19 <version>0.0.1-SNAPSHOT</version> 20 <scope>compile</scope> 21 </dependency> 22 23 </dependencies> 24 </project>

6、maven仓库

  当执行完成mvn install命令的时候,打包成jar的项目和相关配置文件就会保存到maven仓库中以便于向其余项目提供依赖,保存的目录是:~/.m2/repository/$groupId/$artifactId

  例如以上两个项目执行完成mvn install命令以后,若是没有错误,那么在我电脑对应的目录上就会出现一下文件和目录:

  

相关文章
相关标签/搜索