前提
    1、如果项目很庞大,就不再适合继续用package来划分模块。最好是每一个模块对应一个工程,利于分工协作。借助于Maven可以将一个项目拆分成多个工程。
    2、maven可以把jar包仅仅保存在仓库中,有需要使用的工程引用这个文件接口
    3、maven可以以一种规范的方式下载jar包,因为所有知名框架或第三方工具的jar包按照统一的规范存放在maven的中央仓库中
    4、maven会自动将依赖的jar包导入进来

    maven是一款服务于Java平台的自动化构建工具

    配置本地库

    1. <localRepository>C:\Program Files\apache-maven-3.8.1-bin\localRepository</localRepository>

    配置阿里云镜像
    …\JetBrains\IntelliJ IDEA 2020.3.2\plugins\maven\lib\maven3\conf
    为了下载 jar 包方便,在 Maven 的核心配置文件 settings.xml 文件的标签里面配置以下标签:

    1. <mirror>
    2. <id>nexus-aliyun</id>
    3. <mirrorOf>central</mirrorOf> <name>Nexus aliyun</name>
    4. <url>http://maven.aliyun.com/nexus/content/groups/public</url>
    5. </mirror>

    配置jdk版本

    1. <profile>
    2. <id>jdk-1.8</id>
    3. <activation>
    4. <activeByDefault>true</activeByDefault>
    5. <jdk>1.8</jdk>
    6. </activation>
    7. <properties>
    8. <maven.compiler.source>1.8</maven.compiler.source>
    9. <maven.compiler.target>1.8</maven.compiler.target>
    10. <maven.compiler.compilerVersion>1.8</maven.compiler.compilerVersion>
    11. </properties>
    12. </profile>

    Maven仓库
    Maven仓库是基于简单文件系统存储的,集中化管理Java API资源(构件)的一个服务。
    仓库中的任何一个构件都有其唯一的坐标, 根据这个坐标可以定义其在仓库中的唯一存储路径。得益于Maven的坐标机制,任何Maven项目使用任何一个构件的方式都是完全相同的。

    Maven可以在某个位置统一存储所有的 Maven项目共享的构件,这个统一的位置就是仓库,项目构建完毕后生成的构件也可以安装或者部署到仓库中,供其它项目使用。

    对于Maven来说,仓库分为两类:本地仓库和远程仓库。

    Maven工具基于POM (Project Object Model,项目对象模型)模式实现的
    在Maven中每个项目都相当于是一个对象, 对象(项目)和对象(项目)之间是有关系的。关系包含了:依赖、继承、聚合,实现Maven项目可以更加方便的实现导jar包、拆分项目等效果。

    一些概念:
    groupid:公司或组织域名倒叙+项目名
    artifaid:模块名
    version:版本号
    私服:架设在当前局域网环境下,为当前局域网范围内的所有maven工程服务(如:Nexus
    中央仓库:架设在Internet上,为全世界所有maven工程服务

    依赖关系
    在pom.xm|文件根元素project下的dependencies标签中,配置依赖信息,内可以包含多个dependence元素,以声明多个依赖。
    每个依赖dependence标签都应该包含以下元素: groupld, artifactld, version :依赖的基本坐标,对于任何一 个依赖来说,基本坐标是最重要的,Maven根据坐标才能找到需要的依赖。
    省去了手动添加jar包的操作,并且解决了jar包冲突的问题。

    传递性依赖
    假设你的项目依赖于一个库,而这个库又依赖于其他库。不必去找出所有这些依赖,只需要加上直接依赖的库,Maven会隐式的把这些库间接依赖的库也加入到你的项目中。这个特性是靠解析从远程仓库中获取的依赖库的项目文件实现的。
    注:项目之间可以相互依赖,只需要用install打包后,在其它项目内添加依赖即可

    依赖保证两个原则:最短路径优先原则;最先声明原则。
    排除依赖:不使用某个jar包 可根据它的id 排除使用
    image.png

    依赖范围
    compile:默认范围。表示该依赖在编译和运行时有效

    provided:已提供依赖范围。使用此依赖范围的Maven依赖。典型的例子是servlet-api,编译和测试项目的时候需要该依赖,但在运行项目的时候,由于容器已经提供,就不需要Maven重复地引入一遍(如: servlet-api)

    runtime:runtime范围表明编译时不需要生效,而只在运行时生效。典型的例子是JDBC驱动实现,项目主代码的编译只需要JDK提供的JDBC接口,只有在执行测试或者运行项目的时候才需要实现上述接口的具体JDBC驱动。

    system:系统范围与provided类似,不过你必须显式指定一个本地系统路径的JAR, 此类依赖应该一直有效, Maven也不会去仓库中寻找它。但是,使用system范围依赖时必须通过systemPath元素显式地指定依赖文件的路径。

    test:test范围表明使用此依赖范围的依赖,只在编译测试代码和运行测试的时候需要,应用的正常运行不需要此类依赖。典型的例子就是JUnit,它只有在编译测试代码及运行测试的时候才需要。Junit的jar包就在测试阶段用就行了,你导出项目的时候没有必要把junit的东西到处去了就,所在在junit坐标下加入scope -test

    Import:import范围只适用于pom文件中的< dependencyManagement>部分。表明指定的POM必须使用部分的依赖。
    注意: import只能用在dependencyManagement的scope里。
    image.png
    如果加了import,子工程所使用的jar包必须时父工程定义的版本

    聚合关系
    当开发的工程拥有两个以上的模块时,每个模块都是一个独立的功能集合。这时就需要一个聚合工程。
    聚合项目必须是一个pom类型的项目,总的工程必须是一个POM工程。聚合包含了继承的特性。
    聚合时多个项目的本质还是一个项目。 这些项目被一个大的父项目包含。且这时父项目类型为pom类型。同时在父项目的pom.xml中出现表示包含的所有子模块。
    image.png

    资源拷贝插件
    Maven在打包时默认只将src/main/resources里的配置文件拷贝到项目中并做打包处理,而非resource目录 下的配置文件在打包时不会添加到项目中。

    pom.xml配置片段:

    1. < build>
    2. <resources>
    3. <resource> //配置java包下的资源文件
    4. < directory> src/main/java </directory>
    5. <includes>
    6. <include> **/*.xml </include>
    7. </includes>
    8. </resource>
    9. <resource> //配置resources包下的资源文件
    10. <directory> src/main/resources </directory>
    11. <includes >
    12. <include> **/*.xml </include>
    13. <include> **/*.properties </include>
    14. </includes>
    15. </resource>
    16. </resources>
    17. </build>

    Tomcat插件

    1. <build>
    2. <plugins>
    3. <!--配置Tomcat插件-->
    4. <plugin>
    5. <groupId>org.apache.tomcat.maven</groupId>
    6. <artifactId> tomcat7-maven-plugin </artifactId>
    7. <version>2.2 </version>
    8. <configuration>
    9. <!--配置Tomcat监听端口-->
    10. <port> 8080</port>
    11. <!--配置项目的访问路径(Application Context) -->
    12. <path>/ </path>
    13. </configuration>
    14. </plugin>
    15. </plugins>
    16. </build>