Maven概述

Maven是什么

Maven是一个Apache公司的开源项目,是项目构建工具。用来管理项目。

  1. Maven的好处

使用maven可以在项目中不用导入项目依赖的jar包,省去了下载和导入jar包的过程,使项目的大小得
到了缩减。

  1. Maven的两大核心

(1) 依赖管理:对项目需要使用到的jar包进行管理。
(2) 项目构建:项目在编码完成后,对项目进行编译、测试、打包、部署。

Maven仓库

Maven通过一个仓库来存放jar包,在Maven项目中,不再需要导入这些jar包,只需要告诉项目所依赖
的jar包的坐标,Maven就会自己将我们项目所需要的jar包给我们依赖进来。在maven中仓库有三种:
(1)本地仓库:本地仓库就在自己的机器上,我们可以在自己的机器上创建一个maven仓库,然后就
需要的jar包导入进去,就可以在项目中引用。
(2)中央仓库:中央仓库是最大的一个仓库,由Apache组织来负责维护,几乎包括了现在所有的jar包
(有一些涉及版权问题没有,比如:oracle数据库的连接jar包),但是中央仓库的访问速度非常慢。
(3)私服仓库:私服仓库在公司局域网内,公司可以在自己的局域网内创建一个仓库,将项目所需要
的jar包存放在此仓库中,这样整个项目组就都可以使用此仓库提供的jar包,不再需要在自己本地创建仓
库来保存jar包。

Maven如何在仓库中查找包
Maven在仓库中查找jar包需要使用到jar的“坐标”信息:
公司名称groupId+项目名称artifactId +版本信息version

pom.xml

项目对象模型(Project Object Model)

<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.0modelVersion>

<groupId>...groupId>
<artifactId>...artifactId>
<version>...version>
<packaging>...packaging>
<dependencies>...dependencies>


<parent>...parent>
<dependencyManagement>...dependencyManagement>
<modules>...modules>
<properties>...properties>

<build>...build>
<reporting>...reporting>

<name>...name>
<description>...description>
<url>...url>
<inceptionYear>...inceptionYear>
<licenses>...licenses>
<organization>...organization>
<developers>...developers>
<contributors>...contributors>

<issueManagement>...issueManagement>
<ciManagement>...ciManagement>
<mailingLists>...mailingLists>
<scm>...scm>
<prerequisites>...prerequisites>
<repositories>...repositories>
<pluginRepositories>...pluginRepositories>
<distributionManagement>...distributionManagement>
<profiles>...profiles>
project>

Maven安装

  1. 解压Maven
  2. 创建本地仓库

Maven概述_第1张图片
创建repository本地仓库。

  1. 修改配置文件settings.xml
<localRepository>D:/masterSpring/repositorylocalRepository>
  1. 修改中央仓库镜像
<mirrors>
<mirror>
<id>alimavenid>
<mirrorOf>centralmirrorOf>
<name>aliyun mavenname>
<url>http://maven.aliyun.com/nexus/content/repositories/central/url>

mirror>
<mirror>
<id>alimavenid>
<name>aliyun mavenname>
<url>http://maven.aliyun.com/nexus/content/groups/public/url>
<mirrorOf>centralmirrorOf>
mirror>
<mirror>
<id>centralid>
<name>Maven Repository Switchboardname>
<url>http://repo1.maven.org/maven2/url>
<mirrorOf>centralmirrorOf>
mirror>
<mirror>
<id>repo2id>
<mirrorOf>centralmirrorOf>
<name>Human Readable Name for this Mirror.name>
<url>http://repo2.maven.org/maven2/url>
mirror>
<mirror>
<id>ibiblioid>
<mirrorOf>centralmirrorOf>
<name>Human Readable Name for this Mirror.name>
<url>http://mirrors.ibiblio.org/pub/mirrors/maven2/url>
mirror>
<mirror>
<id>jboss-public-repository-groupid>
<mirrorOf>centralmirrorOf>
<name>JBoss Public Repository Groupname>
<url>http://repository.jboss.org/nexus/content/groups/publicurl>
mirror>
<mirror>
<id>google-maven-centralid>
<name>Google Maven Centralname>
<url>https://maven-central.storage.googleapis.com
url>
<mirrorOf>centralmirrorOf>
mirror>

<mirror>
<id>maven.net.cnid>
<name>oneof the central mirrors in chinaname>
<url>http://maven.net.cn/content/groups/public/url>
<mirrorOf>centralmirrorOf>
mirror>

mirrors>
  1. . 在Idea中配置maven

Maven概述_第2张图片
Maven概述_第3张图片

Maven构建项目

标准maven项目结构:
Maven概述_第4张图片
配置环境变量后的项目构建命令:

Maven概述_第5张图片

Maven配置远程Tomcat

<build>
    <sourceDirectory>src/main/javasourceDirectory>
    <resources>
        <resource>
            <directory>src/main/resourcesdirectory>
        resource>
    resources>
    <plugins>
       
 
        
 
        <plugin>
            <groupId>org.apache.tomcat.mavengroupId>
            <artifactId>tomcat7-maven-pluginartifactId>
            <version>2.2version>
            <configuration>
                <port>9000port>   //配置Tomcat的访问端口
                <path>/spring5-webmvc-demopath>   //配置Web的上下文路径
            configuration>
        plugin>
 
    plugins>
build>

依赖配置

Maven概述_第6张图片

分模块开发与设计

在web开发中,MVC架构(表现层,数据链路层,持久层)都是在同一个模块下,有同一个或几个开发者协同开发。在企业中一个web系统是十分庞大的,一个业务系统都有若干人分模块开发。在同一个模块下就无法实现。

Maven提供了分模块开发来满足企业开发的需求。将mvc架构分成不同的模块,通过pom实现私服的引用,这样就满足多人协同开发。

Maven概述_第7张图片
Maven概述_第8张图片

以之前完全注解开的ssm项目为例:ssm完全注解开发

  • domain(pojo)的模块差分:

文件---->项目模块------>新建

Maven概述_第9张图片
Maven------>下一步
Maven概述_第10张图片
在创建完成后删除不必要的源文件目录或资源目录。

Maven概述_第11张图片

Maven概述_第12张图片
pojo模块也不需要导入任何依赖。

在创建其他模块是会出现报错的情况,是由于pom中没到导入依赖,按需导入即可:

Maven概述_第13张图片
当公共依赖导入后,pojo的对象还是报错,就需要导入自定义的模块依赖。依赖都是jar工具包,而模块是一个个的项目,该如何操作呢?
在这里插入图片描述
即该如何导入pojo的自定义模块呢?在使用maven构建工具时,可以使用mvn命令操作项目,需要哪个模块的工具包,就可以使用package命令将其打包为jar包。有了工具包该如何导入依赖呢?maven的install命令可以将jar包上传到本地仓库,那么就可以先打包再上传最后使用依赖导入就可以了。

Maven概述_第14张图片

Maven生命周期知道上传命令包含了前面的任务,直接上传命令install即可。

Maven概述_第15张图片
出现了jar包,在所需的模块按依赖规范导入即可。

Maven概述_第16张图片
在所需要的pom中导入该依赖。

Maven概述_第17张图片
Maven概述_第18张图片

导入自定义依赖后,POJO对象可以正常使用。

其他模块也按此类推。

依赖管理

  1. mvc架构的不同的层都可以分模块开发,分工合作。
  2. 各个模块在使用时必须先上传到本地仓库,才能在其他模块通过导入依赖使用。
  3. 当依赖中出现相同的资源时,层级越深优先级越低、依赖配置的位置越后有覆盖权。

可选依赖
可选依赖是指对外隐藏所依赖的资源:

<dependency>
   <groupId>org.examplegroupId>
    <artifactId>ssm_daoartifactId>
    <version>1.0-SNAPSHOTversion>
    <optional>trueoptional>
dependency>

依赖隐藏后将不再具有传递性。下一个引入该依赖的模块需要重新导入。

排除依赖
排除依赖是指主动断开依赖资源,不需要某个模块。

<exclusions>
    <exclusion>
        <groupId>groupId>
        <artifactId>artifactId>
    exclusion>
exclusions>

聚合与继承

Maven概述_第19张图片
各个模块之间存在依赖关系,往往会有同步更新,需要一个总的pom来管理直接模块。新建parent模块,来管理其他模块。**将打包方式改为pom,通过模块属性实现管理。


<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.0modelVersion>

    <groupId>org.examplegroupId>
    <artifactId>ssm_parentartifactId>
    <version>1.0-SNAPSHOTversion>
    <packaging>pompackaging>

    <properties>
        <maven.compiler.source>8maven.compiler.source>
        <maven.compiler.target>8maven.compiler.target>
    properties>

    
    <modules>
        <module>../ssm_configmodule>
        <module>../ssm_controllermodule>
        <module>../ssm_daomodule>
        <module>../ssm_pojomodule>
    modules>



project>

继承
Maven概述_第20张图片

模块之间存在依赖关系时,当不同的模块具有相同的资源时,对每个模块都导入还要保持版本的一致很麻烦,同理版本控制也可以交由父模块管理。

在子模块继承父模块通过parent属性:

    <parent>
        <artifactId>ssm_daoartifactId>
        <groupId>org.examplegroupId>
        <version>1.0-SNAPSHOTversion>
        <relativePath>../ssm_parent/pom.xmlrelativePath>
    parent>

继承父模块的pom

继承的版本控制,在继承时,凡是继承了父类的模块都在子类中出现,而有些模块是独立的不是公用的,就需要进行模块管理:

    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>groupId>
                <artifactId>artifactId>
                <version>version>
            dependency>
        dependencies>
    dependencyManagement>

继承的具体·步骤:
Maven概述_第21张图片
Maven概述_第22张图片
Maven概述_第23张图片
Maven概述_第24张图片
Maven概述_第25张图片
Maven概述_第26张图片

属性管理

在每个依赖中都需要要导入版本,像spring的全家桶,版本都是一样的,如何需要修改的话每个都要改,pom提供了properties属性来进行批量版本控制。

    <properties>
        <maven.compiler.source>8maven.compiler.source>
        <maven.compiler.target>8maven.compiler.target>

        
        
        <spring.version>5.1.19.RELEASEspring.version>
        
    properties>

版本管理:

Maven概述_第27张图片

测试

Maven概述_第28张图片

你可能感兴趣的:(maven,java,jar)