Maven知识点总结

Maven知识点总结

一.Maven的用途

主要服务于基于JAVA平台的项目构建,依赖管理和项目信息管理。即——Maven是一个构建工具

二.Maven的具体介绍

Maven项目对象模型(POM),可以通过一小段描述信息来管理项目的构建,报告和文档的项目管理工具软件。

Maven 除了以程序构建能力为特色之外,还提供高级项目管理工具。由于 Maven 的缺省构建规则有较高的可重用性,所以常常用两三行 Maven 构建脚本就可以构建简单的项目。由于 Maven 的面向项目的方法,许多 Apache Jakarta 项目发文时使用 Maven,而且公司项目采用 Maven 的比例在持续增长。

Maven这个单词来自于意第绪语(犹太语),意为知识的积累,最初在Jakata Turbine项目中用来简化构建过程。当时有一些项目(有各自Ant build文件),仅有细微的差别,而JAR文件都由CVS来维护。于是希望有一种标准化的方式构建项目,一个清晰的方式定义项目的组成,一个容易的方式发布项目的信息,以及一种简单的方式在多个项目中共享JARs。

Maven是一个项目管理工具,它包含了一个项目对象模型 ,一组标准集合,一个项目生命周期,一个依赖管理系统,和用来运行定义在生命周期阶段中插件目标的逻辑。当你使用Maven的时候,你用一个明确定义的项目对象模型来描述你的项目,然后Maven可以应用横切的逻辑,这些逻辑来自一组共享的(或者自定义的)插件。

Maven 有一个生命周期,当你运行 mvn install 的时候被调用。这条命令告诉 Maven 执行一系列的有序的步骤,直到到达你指定的生命周期。遍历生命周期旅途中的一个影响就是,Maven 运行了许多默认的插件目标,这些目标完成了像编译和创建一个 JAR 文件这样的工作。

此外,Maven能够很方便的帮你管理项目报告,生成站点,管理JAR文件,等等。

三.Maven的命令目录:

mvn archetype:create 创建Maven项目

mvn compile 编译源代码

mvn test-compile 编译测试源代码

mvn test 运行应用程序中的单元测试

mvn site 生成项目相关信息的网站

mvn clean 清除项目目录中的生成结果

mvn package 根据项目生成的jar

mvn install 在本地Respository中安装jar

mvn eclipse:eclipse 生成eclipse项目文件

mvn jetty:run 启动jetty服务

mvn tomcat:run 启动tomcat服务

四.使用Maven构建的优点:

  1. 一个项目就是一个工程

如果项目非常庞大,就不适合使用package来划分模块,最好是每一个模块对应一个工程,利于分工协作。借助于maven就可以将一个项目拆分成多个工程。

  1. 项目中使用jar包,需要“复制”、“粘贴”项目的lib中

同样的jar包重复的出现在不同的项目工程中,你需要做不停的复制粘贴的重复工作。借助于maven,可以将jar包保存在“仓库”中,不管在哪个项目只要使用引用即可就行。

  1. jar包需要的时候每次都要自己准备好或到官网下载

借助于maven我们可以使用统一的规范方式下载jar包,规范。

4.jar包版本不一致的风险

不同的项目在使用jar包的时候,有可能会导致各个项目的jar包版本不一致,导致未执行错误。借助于maven,所有的jar包都放在“仓库”中,所有的项目都使用仓库的一份jar包。

  1. 一个jar包依赖其他的jar包需要自己手动的加入到项目中

FileUpload组件->IO组件,commons-fileupload-1.3.jar依赖于commons-io-2.0.1.jar极大的浪费了我们导入包的时间成本,也极大的增加了学习成本。借助于maven,它会自动的将依赖的jar包导入进来。

五.使用Maven构建的各个环节

1.清理clean:将以前编译得到的旧文件class字节码文件删除

2.编译compile:将java源程序编译成class字节码文件

3.测试test:自动测试,自动调用junit程序

4.报告report:测试程序执行的结果

5.打包package:动态Web工程打War包,java工程打jar包

6.安装install:Maven特定的概念-----将打包得到的文件复制到“仓库”中的指定位置

7.部署deploy:将动态Web工程生成的war包复制到Servlet容器下,使其可以运行

六.Maven使用实践

1.创建约定的目录结构

[1] 根目录:工程名
[2] |---src:源码
[3] |---|---main:存放主程序
[4] |---|---|---java:java源码文件
[5] |---|---|---resource:存放框架的配置文件
[6] |---|---test:存放测试程序
[7] |---pop.xml:maven的核心配置文件

2.创建文件内容

例如,新建一个文件Test.java

package com.hzg.maven;
public class Hello { 
    public String sayHello(String name){   
        return "Test"+name;   
    }
}

POM文件内容:

<?xml version="1.0" ?><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"><modelVersion>4.0.0</modelVersion>
<groupId>com.hzg.maven</groupId><artifactId>Test</artifactId><version>0.0.1-SNAPSHOT</version>
<name>Test</name>      
<dependencies>
<dependency>
<groupId>junit</groupId><artifactId>junit</artifactId><version>4.0</version>
<scope>test</scope>
</dependency>
</dependencies>
</project>

3.执行Maven命令

前面已提到过Maven的命令目录,但需要注意的是Maven的命令执行必须进入到pom.xml的目录中。

例如:运行mvn compile

这样,就将pom.xml中配置的包导入仓库中了

**仓库的默认位置:**c:Usrs[登录当前系统的用户名].m2 epository

此时我们发现,之前创建的项目里多了一个target文件夹,里面存放的就是编译后的字节码文件。运行mvn test-compile,target文件夹下面除了classes之外多了test-classes文件夹;运行mvn package,target文件夹下面又多了一个打好的jar包;运行mvn clean,发现整个target文件夹都没了。又回到了编译之前我们手动创建的文件夹。

七.仓库和坐标

pom.xml:Project Object Model 项目对象模型。它是maven的核心配置文件,所有的构建的配置都在这里设置。

坐标:使用下面的三个向量在仓库中唯一的定位一个maven工程(groupId,artifactId,version)

maven工程的坐标与仓库中路径的关系:

<groupId>com.hzg.maven</groupId>
<artifactId>Test</artifactId>
<version>0.0.1-SNAPSHOT</version>//本项目的坐标

<dependency>                     
       <groupId>org.springframework</groupId>
       <artifactId>spring-core</artifactId>
       <version>4.3.4.RELEASE</version>
       <scope>compile</scope>
<dependency>//依赖的项目坐标

仓库的分类:

1、本地仓库:当前电脑上的仓库,路径上已经说过了哦

2、远程仓库:

(1)私服:搭建在局域网中,一般公司都会有私服,私服一般使用nexus来搭建。具体搭建过程可以查询其他资料

(2)中央仓库:架设在Internet上,像刚才的springframework就是在中央仓库上

以上提到的scope之前没有解释过,这实际上就是指依赖的范围

1、compile,默认值,适用于所有阶段(开发、测试、部署、运行),本jar会一直存在所有阶段。

2、provided,只在开发、测试阶段使用,目的是不让Servlet容器和你本地仓库的jar包冲突 。如servlet.jar。

3、runtime,只在运行时使用,如JDBC驱动,适用运行和测试阶段。

4、test,只在测试时使用,用于编译和运行测试代码。不会随项目发布。

5、system,类似provided,需要显式提供包含依赖的jar,Maven不会在Repository中查找它。

八.生命周期

​ Maven有三套相互独立的生命周期,请注意这里说的是“三套”,而且“相互独立”,初学者容易将Maven的生命周期看成一个整体,其实不然。这三套生命周期分别是:

<1>Clean Lifecycle在进行真正的构建之前进行一些清理工作。Clean生命周期一共包含了三个阶段:

1、pre-clean 执行一些需要在clean之前完成的工作

2、clean 移除所有上一次构建生成的文件

3、post-clean 执行一些需要在clean之后立刻完成的工作

<2>Default Lifecycle构建的核心部分,编译,测试,打包,部署等等

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

执行mvn install,其中已经执行了compile 和 test 。

总结:不论你要执行生命周期的哪一个阶段,maven都是从这个生命周期的开始执行

插件:每个阶段都有插件,看上面标红的。插件的职责就是执行它对应的命令。

<3>Site Lifecycle生成项目报告,站点,发布站点

pre-site //执行一些需要在生成站点文档之前完成的工作
site    //生成项目的站点文档
post-site     //执行一些需要在生成站点文档之后完成的工作,并且为部署做准备
site-deploy    // 将生成的站点文档部署到特定的服务器上

九.Maven中的build配置

<build>
   <!-- 项目的名字 -->  
   <finalName>WebMavenDemo</finalName>  
   <!-- 描述项目中资源的位置 -->  
   <resources>    
       <!-- 自定义资源1 -->    
       <resource>      
            <!-- 资源目录 -->            
            <directory>src/main/java</directory>
            <!-- 包括哪些文件参与打包 -->      
            <includes>        
                <include>**/*.xml</include>      
            </includes>      
            <!-- 排除哪些文件不参与打包 -->      
            <excludes>           
              <exclude>**/*.txt</exclude>  
                <exclude>**/*.doc</exclude>      
            </excludes>    
         </resource>  
     </resources>  
     <!-- 设置构建时候的插件 -->  
     <plugins>    
     <plugin>      
            <groupId>org.apache.maven.plugins</groupId>        
            <artifactId>maven-compiler-plugin</artifactId>
            <version>2.1</version>      
            <configuration>        
                 <!-- 源代码编译版本 -->         
                 <source>1.8</source>
                 <!-- 目标平台编译版本 -->        
                 <target>1.8</target>
            </configuration>    
          </plugin>    
          <!-- 资源插件(资源的插件) -->    
          <plugin>      
              <groupId>org.apache.maven.plugins</groupId>   
              <artifactId>maven-resources-plugin</artifactId>
              <version>2.1</version> 
              <executions>        
                <execution>          
                  <phase>compile</phase>        
                </execution>      
              </executions>      
              <configuration>        
                   <encoding>UTF-8</encoding>      
                   </configuration>    
                   </plugin>    
         <!-- war插件(将项目打成war包) -->    
         <plugin>            
             <groupId>org.apache.maven.plugins</groupId>
             <artifactId>maven-war-plugin</artifactId>     
             <version>2.1</version>      
             <configuration>        
               <!-- war包名字 -->        
               <warName>WebMavenDemo1</warName>
              </configuration>   
         </plugin> 
 </plugins></build>

tifactId>maven-war-plugin     
2.1      
        
        
WebMavenDemo1
   
 


配置好build后,执行mvn package之后,在maven工程指定的target目录里war包和文件都按照配置的生成了
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值