Maven基础

Maven

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. D:\repository_ssh

注意:这里的意思是配置本地仓库的目录为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

目录结构说明

  • 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)

将下面的信息黏贴到pom.xml中

<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” 按钮

常见命令

  • 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约定而不是硬件要求),总之,模块所处的目录必须和模块所处的目录相一致.
  7. 习惯约定:为了方便构建,通常将聚合模块放在项目目录层的最顶层,其它聚合模块作为子目录存在,这样当我们打开项目的时候,第一个看到的就是聚合模块的POM.
  8. 聚合模块减少的内容:聚合模块的内容仅仅是一个pom.xml文件,它不包含src/main/java , src/test/java 等目录,因为它指示用来帮助其它模块构建的工具,本身并没有实质的内容.
  9. 聚合模块和子模块的目录:他们可以是父子类,也可以是平台结构,当然如何使用平行结构,那么聚合模块的POM也需要做出相应的更改.

二,继承

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

如何配置继承:

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

三,聚合与继承的区别

img

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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值