美文网首页
Maven入门

Maven入门

作者: 有_味 | 来源:发表于2018-07-29 16:29 被阅读13次

    Maven

    [TOC]

    1.Maven简介

    1.1 什么是Maven

     maven是apache下的一个开源项目,是纯java开发,并且只是用来管理java项目的.

    1.1.1 项目对象模型

    POM对象模型,每个maven工程都有个pom.xml文件,定义工程所依赖的jar包,本工程的坐标,打包运行方式.

    1.1.2. 依赖管理系统(基础核心)

     maven通过坐标对项目工程所依赖的jar包统一规范管理.

    1.1.3 的好处

    一般项目:jar包在项目中,工程笔记大.

    maven管理的项目:jar包与工程分离,小巧轻便.

    1. 依赖管理,就是对jar包的统一管理,可以节省空间
    2. 一键构建
    3. 可以跨平台
    4. 应用与大型项目,可以诶提高开发效率
    5. maven的分模块开发

    1.3 项目管理

    依赖管理:项目与依赖之间的关系称为依赖管理.

    1.4 项目一键构建

    普通项目构建:编码 → 编译 → 测试 → 打包 → 部署

    maven项目构建:编译 → 测试 → 打包 → 部署

    一键运行命令: tomcat:run 能把项目运行起来.

    maven 可以做的事情
    编译 → 测试 → 打包 → 部署

    1.5 Maven仓库介绍

    1. 中央仓库

     就是远程仓库,仓库中jar由专业团队(maven团队)统一维护.
    中央仓库地址http://repo1.maven.org/maven2/

    2. 本地仓库

     相当于缓存,工程第一次会从远程仓库(互联网)去下载jar包,将jar包存放在本地仓库(在程序员的个人电脑上).第二次不需要从远程仓库去下载,先从本地仓库找,如果找不到才会去远程仓库找.

    3. 私服

    &emap;在公司内部架设一台服务器,其他公司可架设一台仓库,对外公开.

    2. Maven的安装配置

    2.1 下载安装maven软件

    可以到maven的官网下载

    http://maven.apache.org/download.cgi

    我们将下载的压缩包解压到D盘根目录,D盘根目录会有下面的文件夹(不包含中文目录的就可以了.)

    2.2 本地仓库配置.

    1. 打开maven的安装目录
    2. 找到cnf/setting.xml,打开
    3. <localRepository>D:\repository_ssh</localRepository>

    注意:这里的意思是配置本地仓库的目录为D:\repository_ssh 配置自己的仓库地址

    2.3 maven环境变量配置及配置

    maven3.3x 所需要的JDK都是需要1.7以上的版本.

    1. 下载maven

    下载后直接解压就可以使用

    2. 配置环境变量

    img
    • 配置MAVEN_HOME
      • 变量名:MAVEN_HOME
      • 变量值: maven的安装目录
    • 配置path
      • 后面加上路径,注意:前后需要用分号隔开
      • ;%MAVEN_HOME\bin%;

    3. 配置本地仓库

    在安装目录下的conf下的 settings.xml 设置本地仓库的路径

      <localRepository>C:\develop\maven\repository</localRepository>
    

    这样maven就可以直接使用本地仓库而不需要从网上下载.如果你没有设置,本地仓库那么maven会在c:\用户\目录下新建一个文件夹.

    3. 入门程序

    3.1 创建工程

    1. 打开eclipse 创建一个MavenProject工程选择Next
    2. 在New Maven Project 窗口内. 勾选 Create a simple project (skip .....) , Next .
    3. 定义工程,Maven 对所有的工程管理基于坐标进行管理 , 填入 Group Id , Atrifact Id , 选择Finish.

    名词解释

    • Group Id : 项目名称, 名称名以域名倒序,不如.com.baidu.mevendemo
    • Artifact Id :模块名称(子项目名称)
    • Version : 模块的版本, shapshot(快照版,没有正式发行),release(正式发行版本)
    1. 输入 Finish 后进如下图
    img

    <font color=red size=4>目录结构说明</font>

    • project
      • /src/main/java 主体程序java源文件(不要方配置文件)
      • /src/main/resources 主体程序所需要的配置文件(不要方java文件)
      • /src/test/java 单元测试java源文件
      • /src/test/resource 单元测试程序所用的配置文件
      • /target 编译输出目录
      • pom.xml Maven 进行工作的主要配置文件
    1. 编写代码

    5.1 在src/main/java 目录下创建包 com.zyw.mavendemo
    5.2 在包com/zyw/mavendemo 下创建HelloWorld类

    public class HelloWorld {
    
        public static void main(String[] args) {
            System.out.println("Hello World!!");
        }
    }
    

    3.2 设置编译版本

     1. 我们现在在Maven工程默认是JDK1.5 , 我们需要将编译版本该为系统对应的JDK(我的系统是1.7)

    <font color=red size=4>将下面的信息黏贴到pom.xml中</font>

    <build>  
          <plugins>
              <plugin>  
                  <groupId>org.apache.maven.plugins</groupId>  
                  <artifactId>maven-compiler-plugin</artifactId>  
                  <version>2.3.2</version>  
                  <configuration>  
                      <source>1.7</source>  
                      <target>1.7</target>  
                  </configuration>  
              </plugin>  
          </plugins>  
       </build>  
    
    1. 右键工程 Maven → Update Project...
      弹出窗口后,我们的编译版本就改位1.7了.

    4. 添加依赖

    1. 右键工程 → Maven → Add Dependency 打开 Add Dependency 窗口
    2. 在 Enter groupId,atrifactid or sh1 .... 下方输入需要依赖的库. 选择好后 点击 "OK" 按钮.
    3. 这时我们发现pom.xml ,多了一下信息(你选择的是什么jar包就出先什么样的信息)
      <dependencies>
        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-core</artifactId>
            <version>5.0.7.Final</version>
        </dependency>
      </dependencies>
    
    1. 工程目录下的Maven Dependecies 下多了很多的jar包,因为我们依赖的jar包可能还需要依赖别的包才可以运行.

    4 项目的生命周期

     Maven有三套相互独立的生命周期,分别是:clean,default,site. clean主要是情路项目. default是Maven最核心的构建项目,site 是生成项目站点. 每一个大的生命周期又分为很多个杰顿. 后面的阶段依赖与前面的激阶段,这点有点项Ant的构建依赖,声明周期本身相互独立,用户可以仅仅调用声明周期的某一个阶段,也就是说用户调用了default周期的任何节点,并不会触发clean周期一级site周期的任何事情. 三大生命周期蕴含着小小的阶段. 如下图所示.

    img

    4.1 clean周期

    • pre-clean:准备清理
    • clean:真正的清理工作
    • post-clean:执行清理后的一些后续工作

    4.2 default 周期

    • validate:验证
    • initialize:初始化配置
    • generate-sources:生成源代码编译目录
    • process-sources:处理项目主资源文件,复制资源文件到output- classpath
      generate-resources:生成资源目录
    • process-resources:处理资源文件
    • complie:编译源代码
      process-classes:处理编译后文件
    • generate-test-sources:生成测试目录
    • process-test-sources:处理项目测试资源文件,复制测试资源文件到outputclasspath
    • generate-test-resources:生成测试资源文件
    • process-test-resources:处理测试资源文件
    • test-compile:编译测试代码
    • process-test-classes:处理测试代码
    • test:单元测试运行测试代码
    • prepare-package:打包前的准备
    • package:将编译好的代码打包成为jar或者war或者ear等等
    • pre-integration-test:准备整体测试
    • integration-test:整体测试
    • post-integration-test:为整体测试收尾
    • verify:验证
    • install:安装到本地Maven库
    • deploy:将最终包部署到远程Maven仓库

    4.3 site 周期

    • pre-site:准备生成站点
    • site:生成站点及文档
    • post-site:站点收尾
    • site-deploy:将生成的站点发布到服务器上

    5. 常见命令

    Maven通过命令对工程进行清理,编译测试,打包,部署.

    1. 右键工程 Run As(或Debug As) → Maven Build... 进入Edit Configuation 窗口
    2. 在Goals 中输入命令 点击"Run" 按钮

    <font color=red size=4>常见命令</font>

    • compile:编译
    • clean:清理,将target下的class文件清理
    • test: 执行单元测试类,执行src/test/java下的类
    • package :将java工程打成jar、war。
    • install:安装命令,将将程的jar发布到本地仓库
      发布到仓库,目录按照本工程定义的坐标生成目录

    4,创建SSH工程

    详见 Maven创建SSH工程

    5,聚合与继承

    聚合

     随着技术的发展和各类用户对软件的要求越来越高,软件本身也变得越来月复杂,然后软件设计人员开始采用各种方式进行开发,于是就有了我们的分层架构,分模块开发,来提高代码的清晰和重用.针对这以特性,maven也给予了相应的配置.

     我们在开发过程中,创建了2个以上的模块,每个模块都是一个独立的maven Project , 在开始的时候我们可以 独立的编译和测试运行每个模块,但是随着项目的不断变大和复杂 化,我们期望能够使用简单的操作来完成编译等工作,这时Maven给出了聚合的配置方式.

     所谓聚合,顾名思义,就是把多个模块项目聚合到一起,我们可以建立一个专门负责聚合工作的Maven工程.

      建立该project的时候需要注意一下几个点:

    1. 聚合模块本身也作为要给Maven项目,它必须有自己的POM.
    2. 它的打包方式必须为:pom
    3. 引入了新的元素:modules--module
    4. 版本:聚合模块的版本和被聚合模块版本一致.
    5. 相对目录:每个module的值都是一个当前POM的相对目录.
    6. 目录名称:为了方便的快速定位内容,模块所处的目录应当与artifactId一致(Maven约定而不是硬件要求),总之,模块所处的目录必须和<module>模块所处的目录</module>相一致.
    7. 习惯约定:为了方便构建,通常将聚合模块放在项目目录层的最顶层,其它聚合模块作为子目录存在,这样当我们打开项目的时候,第一个看到的就是聚合模块的POM.
    8. 聚合模块减少的内容:聚合模块的内容仅仅是一个pom.xml文件,它不包含src/main/java , src/test/java 等目录,因为它指示用来帮助其它模块构建的工具,本身并没有实质的内容.
    9. 聚合模块和子模块的目录:他们可以是父子类,也可以是平台结构,当然如何使用平行结构,那么聚合模块的POM也需要做出相应的更改.

    二,继承

     我们在项目开发过程中,可能多个模块独立开发,但是多个模块可能依赖相同的元素,比如说每一个模块都需要Junit,使用spring的时候,器核心jar也必须都被引用,在编译的时候,maven-compiler-plugin 插件也要被引入.这时我们采用继承,就不用在每个子模块分别定义了.

    如何配置继承:

    1. 说到继承肯定是一个父子结构,那么我们在父工程中来创建一个parent project .
    2. <packaging>: 作为父模块的POM,其打包类型也必须为POM.
    3. 结构:父模块只是为了帮助我们消除重复,所以它也不需要src/main/java , src/test/java 等目录.
    4. 新的元素<parent> , 它是被用在子模块中的.
    5. <parent>元素属性:<relativePath>:表示父模块POM的相对路径,在构建时候,Maven会先根据relativePath检查父POM,如果找不到,再从本地仓库查找
    6. relativePath的默认值../pom.xml
    7. 子模块省略groupId和version:使用了继承的子模块中可以不声明groupId和version,子模块将隐式的继承父模块的这两个元素.

    三,聚合与继承的区别

    img

     聚合和继承通常是集合使用的,但是其作用是不同的.聚合是将多个模块的工程聚合在一起,而继承则是指明某个模块工程哟啊继承另一个模块功能.

    相关文章

      网友评论

          本文标题:Maven入门

          本文链接:https://www.haomeiwen.com/subject/wbttvftx.html