Maven整理

简介

Maven是一个管理工程的工具,它实现了项目构建,Jar包的管理,工程之间依赖的管理以及自动打包。

Maven可以实现让项目与依赖的jar包实现分离,他会把jar包保存在本地仓库(就是放JAR的地方),当使用的时候,通过坐标来获取(jar包管理),第一次接触可能会问,把需要的jar包拷贝到lib目录下跟放在本地仓库有什么不一样吗,这也很好说明,如果使用传统方式,当你开发完一个项目,再开发另一个项目,他们所需要相同jar包的时候,你又得再拷贝一份,虽然不是特别麻烦,但项目构建多了对硬盘内存也是一种浪费,但使用maven就可以完全避免这个问题。

绝大部分Maven用户都称Maven是一个"构建工具":一个用来把源代码构建成可发布的构件的工具。 构建工程师和项目经理会说 Maven是一个更复杂的东西:一个项目管理工具。那么区别是什么? 像Ant这样的构建 工具仅仅是关注预处理,编译,打包,测试和分发。像 Maven 这样的一个项目管理工 具提供了构建工具所提供功能的超集。 除了提供构建的功能,Maven还可以生成报告, 生成Web站点,并且帮助推动工作团 队成员间的交流。一个更正式的 Apache Maven 1 的定义: Maven是一个项目管理工具,它包含了一个项目对象模型 (Project Object Model),一组标准集合,一个项目生命周期(ProjectLifecycle),一个依赖管理系统(Dependency Management System),和用来运行定义在生命周期阶段(phase)中插件(plugin)目标(goal)的逻辑。 当你使用Maven的时候,你用一个明确定义的项目对象模型来描述你的项目,然后 Maven 可以应用横切的逻辑,这些逻辑来自一组共享的(或者自定义的)插件。别让Maven是一个"项目管理"工具的事实吓跑你。如果你只是在找一个构建工具,Maven能做这个工作。 事实上,本书的一些章节将会涉及使用Maven来构建和分发你的项目。

大家会发现,在平时项目中,我们每天有相当一部分时间花在了编译、运行单元测试、生成文档、打包和部署等烦琐且不起眼的工作上,如果你使用Ant,会发现很多东西都要程序员去定义,去编写build文件,然而有了Maven这个构建工具,能够帮我们自动化构建过程,从清理、编译、测试到生成报告,再到打包和部署。我们不需要也不应该一遍又一遍地输入命令,一次又一次地点击鼠标,或者小心翼翼的写着配置文件,我们要做的是使用Maven配置好项目,然后输入简单的命令(如mvn clean install),Maven会帮我们处理那些烦琐的任务。这一切都体现了一句经典“约定优于配置”,当然Maven不仅是构建工具,还是一个依赖管理工具和项目信息管理工具,况且Maven也是跨平台的。这些都会通过实例说明。

Maven项目的目录结构

在这里插入图片描述

Maven构建生命周期及命令

验证 validate	验证项目	验证项目是否正确且所有必须信息是可用的

编译 compile	执行编译	源代码编译在此阶段完成

测试 Test	测试	使用适当的单元测试框架(例如JUnit)运行测试。

包装 package	打包	创建JAR/WAR包如在 pom.xml 中定义提及的包

检查 verify	检查	对集成测试的结果进行检查,以保证质量达标

安装 install	安装	安装打包的项目到本地仓库,以供其他项目使用

部署 deploy	部署	拷贝最终的工程包到远程仓库中,以共享给其他开发人员和工程

clean:把target目录删除,相当于把编译的.class文件全部删掉

为了完成 default 生命周期,这些阶段(包括其他未在上面罗列的生命周期阶段)将被按顺序地执行。

Maven 有以下三个标准的生命周期:

clean:项目清理的处理
default(或 build):项目部署的处理
site:项目站点文档创建的处理

常用命令

compile:建立target目录,相当于编译,创建.class文件

install:把项目打成jar包或者war包,安装到本地repository

package:把项目打成jar包或者war包,到target目录

test:运行工程的测试

Scope(作用域)

compile:默认作用域,在编译、测试、运行时有效

test:对于测试时有效

runtime:对于测试、运行时有效

provided:对于编译、测试时有效,但在运行时无效

system:与 provided 类似,但依赖于系统资源

锁定版本

<!-- 属性: 定义版本的常量,方便修改 -->
  9   <properties>
 10     <!-- 名称是任意的,建议使用有意义的名字 -->
 11     <spring.version>4.2.4.RELEASE</spring.version>
 12     <hibernate.version>5.0.7.Final</hibernate.version>
 13     <struts.version>2.3.24</struts.version>
 14   </properties>
 15   
 16   <!-- 锁定版本: struts2-2.3.24, spring4.2.4, hibernate5.0.7 -->
 17   <dependencyManagement>
 18     <dependencies>
 19         <dependency>
 20             <groupId>org.springframework</groupId>
 21             <artifactId>spring-context</artifactId>
 22             <!-- OGNL 表达式  -->
 23             <version>${spring.version}</version>
 24         </dependency>
 25         <dependency>    
 26             <groupId>org.springframework</groupId>
 27             <artifactId>spring-aspects</artifactId>
 28             <version>${spring.version}</version>
 29         </dependency>
 30         <dependency>    
 31             <groupId>org.springframework</groupId>
 32             <artifactId>spring-orm</artifactId>
 33             <version>${spring.version}</version>
 34         </dependency>
 35         <dependency>    
 36             <groupId>org.springframework</groupId>
 37             <artifactId>spring-test</artifactId>
 38             <version>${spring.version}</version>
 39         </dependency>
 40         <dependency>    
 41             <groupId>org.springframework</groupId>
 42             <artifactId>spring-web</artifactId>
 43             <version>${spring.version}</version>
 44         </dependency>
 45         <dependency>
 46             <groupId>org.hibernate</groupId>
 47             <artifactId>hibernate-core</artifactId>
 48             <version>${hibernate.version}</version>
 49         </dependency>
 50         <dependency>
 51             <groupId>org.apache.struts</groupId>
 52             <artifactId>struts2-core</artifactId>
 53             <version>${struts.version}</version>
 54         </dependency>
 55         <dependency>
 56             <groupId>org.apache.struts</groupId>
 57             <artifactId>struts2-spring-plugin</artifactId>
 58             <version>${struts.version}</version>
 59         </dependency>
 60     </dependencies>
 61   </dependencyManagement>

设置JDK版本

 <!-- 设置JDK 版本 -->
 <build>
     <plugins>
         <plugin>
             <groupId>org.apache.maven.plugins</groupId>
             <artifactId>maven-compiler-plugin</artifactId>
             <version>3.1</version>
             <configuration>
                 <source>1.7</source>
                 <target>1.7</target>
                 <encoding>UTF-8</encoding>
             </configuration>
         </plugin>
     </plugins>
 </build>

POM文件属性和说明

在这里插入图片描述

Maven依赖传递

1.什么是传递依赖?
依赖一个jar包往往会下载相互关联的jar包这就是依赖传递

2.依赖传递出现的问题
依赖传递出现的问题: 经常出现jar包冲突,
解决方案:直接排除指定的jar包

3.解决jar包冲突的方式(4种)
3.1 排除原则(常用)
3.2 版本号限定原则
3.3 第一声明原则(基本不用)
3.4 路径就近原则(基本不用)

4 依赖传递中的依赖范围
在这里插入图片描述

Maven继承

开发中多个项目有共同的jar包依赖,可以采用继承方式简化各个项目的pom文件,在父类的pom文件中依赖共同拥有的jar.
注意:
1.父级项目只能是pom打包方式。
2.子项目是一个Maven Project
示例: 创建一个pom项目,然后再创建另外的jar或war项目继承pom项目

Maven聚合和拆分

在这里插入图片描述
maven_parent下pom.xml文件代码:

<?xml version="1.0" encoding="UTF-8"?>
<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.qjb</groupId>
    <artifactId>maven_parent</artifactId>
    <packaging>pom</packaging>
    <version>1.0-SNAPSHOT</version>
    <modules>
        <module>maven_dao</module>
        <module>maven_service</module>
        <module>maven_web</module>
    </modules>
    
</project>

模块maven_service如果要使用maven_dao,则需要建立依赖:
模块maven_web也可这样于maven_service建立依赖

<?xml version="1.0" encoding="UTF-8"?>
<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">
    <parent>
        <artifactId>maven_parent</artifactId>
        <groupId>com.qjb</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>maven_service</artifactId>

    <dependencies>
        <dependency>
            <groupId>com.qjb</groupId>
            <artifactId>maven_dao</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>
    </dependencies>

</project>

能够把项目的各个模块聚合在一起构建。一般用于分模块开发,最后整体打包发布。

 Maven Model和Maven Project的区别?
      Maven Project独立运行
      Maven Model无法独立运行

注意:
1.根项目是一个pom项目。
2.子模块:Maven Model
3.每个模块写完后需要上传到私服
4.打包,需要整体打包找到最后的war项目使用Tomcat加载

    实际中,我们会将一些庞大的项目拆分为若干模块进行开发
    三层+MVC 如下:
    model-------jar
    dao----------jar
    service------jar
    web----------war

Maven父子工程三种启动方式

1、maven_parent通过maven命令使用内置tomcat启动

2、使用install命令将maven_parent项目打包并放置到本地仓库中,maven_web通过maven命令使用内置tomcat启动

3、使用本地tomcat启动

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值